在Windows上运行xampp的开发服务器上,我的.htacess重写规则工作正常。一旦我们进入正在运行Linux core 3.8.0-21-generic #32-Ubuntu SMP Server version: Apache/2.2.22 (Ubuntu)
的实时服务器,我们不包含参数的规则不再有效,但有参数的规则正在工作。
Options -Indexes
<filesMatch ".(html|htm|txt|js|htaccess)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
</filesMatch>
ErrorDocument 404 /404.php
RewriteEngine On
#Main site rules
RewriteRule ^login/?$ login.php [NC,L]
RewriteRule ^contact/?$ contact.php [NC,L]
上述用于联系.php和登录的规则.php不起作用。但是,这个更复杂的参数规则正在起作用: RewriteRule ^game/([a-zA-Z0-9]+)/?$ handles/handle-game-select.php?name=$1 [NC,L]
两个服务器环境之间是否存在导致这种情况发生的差异?
此外,似乎如果我们做一些奇怪的事情,例如:RewriteRule ^contact.x contact.php [NC,L]
我们能够取得联系.php......
对此非常困惑。
感谢您的任何帮助。
我怀疑这是由于启用了MultiViews
选项。在顶部添加此行以禁用它:
Options -MultiViews
- 选项
MultiViews
由在mod_rewrite
之前运行的Apache's content negotiation module
使用,并使 Apache 服务器匹配文件的扩展名。所以/file
可以在 URL 中,但它会/file.php
服务。