【发布时间】:2018-03-30 18:40:08
【问题描述】:
我正在使用这个 sn-p 来启用干净的 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,但没有运气。
我读到如果我使用DirectorySlash Off,我必须删除RewriteCond %{REQUEST_FILENAME} !-d,这也不起作用。
更不用说我在寻找解决方案时尝试了大约十几个不同的 sn-ps。
处理我的场景的正确方法是什么?
【问题讨论】:
-
请注意,如果您将
-MultiViews更改为+MultiViews,则不需要您编写的所有代码。它会自动完成,不仅使用php,还使用css 和js,png,等等。 -
@Konstantinos 感谢您的提示。但不幸的是,问题仍然存在。
-
是的,我刚才提到你不需要所有的代码来完成可以通过 1 个字符更改完成的事情。现在对于您的其他问题,您想优先考虑什么?首先检查文件是否存在并加载它或首先检查文件夹是否存在并加载它?如果它们具有相同的名称,您希望首先加载什么。
-
我想要加载文件,所以如果它们共享相同的名称,请优先考虑文件。
-
需要一些例子。例如如果请求是
example.com/abc/并且有/abc.php以及一个名为/abc/的目录,那么您要加载/abc.php吗?
标签: php apache .htaccess mod-rewrite clean-urls