我正在使用此代码段来启用干净的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 ^(.*?)/?$ $1.php [L]
这很好用,但问题是我有一些目录与一些PHP文件共享同一个名称。
因此,我获得了目录结构,而不是所需的页面。
我尝试在所有重写规则之前添加DirectorySlash Off
,但没有运气。
我已经读过,如果我使用RewriteCond %{REQUEST_FILENAME} !-d
,我必须删除DirectorySlash Off
,但这也不起作用。
更不用说我在寻找解决方案时尝试了大约十几个不同的片段。
处理我的方案的正确方法是什么?
答案 0 :(得分:1)
将.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}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
DirectorySlash
设置为默认值。Options -Indexes
用于禁用目录列表。