此规则非常有效:
RewriteCond %{HTTP_HOST} ^(.*)\.[a-z0-9\-]{3,}\..*
RewriteRule ^t/(.*)$ /p.php?p=$1 [L]
这个几乎相同的规则抛出404:
RewriteCond %{HTTP_HOST} ^(.*)\.[a-z0-9\-]{3,}\..*
RewriteRule ^p/(.*)$ /p.php?p=$1 [L]
是否有一些Apache或DNS规则打破了这一规定?我在较旧的服务器上具有相同的.htaccess文件,并且工作正常。新服务器是带有PHP7的CentOS7。
答案 0 :(得分:0)
从我的评论中可以明显看出,默认情况下您已启用MultiViews
选项。
您可以通过将此行放在.htaccess顶部将其关闭:
Options -MultiViews
选项MultiViews
(请参阅http://httpd.apache.org/docs/2.4/content-negotiation.html)由Apache's content negotiation module
使用,该选项运行之前 mod_rewrite
模块,并使Apache服务器匹配文件扩展名。最好在使用mod_rewrite
规则时将其关闭,以免发生此类意外行为。
例如/file
是URI,并且文档根目录中存在文件名file.php
,那么Apache可能会找到匹配的文件并提供该文件,而不是匹配您的规则。