当目录和文件共享相同名称时清理 URL
Clean URLs when directories and files share the same name
我正在使用此代码段来启用干净的 URL,从而有效地删除 PHP 扩展名。
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
## hide .php extension snippet
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ .php [L]
这很好用,但问题是我有一些目录与某些 PHP 文件同名。
所以我得到的不是所需的页面,而是目录结构。
我尝试在所有重写规则之前添加 DirectorySlash Off
,但没有成功。
我读到,如果我正在使用 DirectorySlash Off
,我必须删除 RewriteCond %{REQUEST_FILENAME} !-d
,这也不起作用。
更不用说我在寻找解决方案时尝试了十几个不同的片段。
处理我的场景的正确方法是什么?
将您的 .htaccess 更改为:
Options +FollowSymLinks -MultiViews -Indexes
RewriteEngine On
RewriteBase /
## hide .php extension snippet
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,NE,L]
RewriteCond %{DOCUMENT_ROOT}/.php -f
RewriteRule ^(.+?)/?$ .php [L]
- 出于安全原因,将
DirectorySlash
保持为默认值。
Options -Indexes
用于禁用目录列表。
我正在使用此代码段来启用干净的 URL,从而有效地删除 PHP 扩展名。
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
## hide .php extension snippet
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ .php [L]
这很好用,但问题是我有一些目录与某些 PHP 文件同名。
所以我得到的不是所需的页面,而是目录结构。
我尝试在所有重写规则之前添加 DirectorySlash Off
,但没有成功。
我读到,如果我正在使用 DirectorySlash Off
,我必须删除 RewriteCond %{REQUEST_FILENAME} !-d
,这也不起作用。
更不用说我在寻找解决方案时尝试了十几个不同的片段。
处理我的场景的正确方法是什么?
将您的 .htaccess 更改为:
Options +FollowSymLinks -MultiViews -Indexes
RewriteEngine On
RewriteBase /
## hide .php extension snippet
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,NE,L]
RewriteCond %{DOCUMENT_ROOT}/.php -f
RewriteRule ^(.+?)/?$ .php [L]
- 出于安全原因,将
DirectorySlash
保持为默认值。 Options -Indexes
用于禁用目录列表。