我在htaccess中有几个重写规则。它们在一台服务器上运行但不在另一台服我的脚本如下(我已经注释了网址的外观):
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/images/
#example.com/regions/fife/
RewriteRule ^regions/([A-Za-z0-9\-\+\']+)/?$ /regions.php?region=$1 [L]
#example.com/regions/fife/dunfermline
RewriteRule ^regions/([^/]+)/([^/]+)$ /regions.php?region=$1&town=$2 [L]
它返回两个我可以在PHP中操作的变量(region& town),并抛出适当的内容。我有一个Rackspace服务器,脚本运行完美,但在另一台服务器(Freedom2surf)上它只能工作到目前为止。它不返回变量。我得到一个空白的$ _GET数组......
有什么想法吗? F2S没有给我任何线索,只是我应该检查我的代码。但如果它在另一台服务器上工作,那么是什么呢?这是一个不同的Apache设置吗?
答案 0 :(得分:0)
我想你可能会在'QSA'标志之后,它会将原始请求中的查询字符串附加到重定向的请求,例如:
#example.com/regions/fife/
RewriteRule ^regions/([A-Za-z0-9\-\+\']+)/?$ /regions.php?region=$1 [L,QSA]
答案 1 :(得分:0)
这听起来好像你在这里遇到mod_negotiation冲突,你需要将多视图关闭。有时默认情况下,apache默认配置已启用Multiviews
。它的作用是查看请求,比如/regions/1234
,mod_negotiation会注意到有一个文件/regions.php
,并假设该请求实际上是针对该php文件的。因此它将服务/regions.php/1234
并完全绕过mod_rewrite。您可以使用Options
将其关闭。只需将其添加到htaccess文件的顶部:
Options -Multiviews