RewriteRule变量空白

时间:2010-01-22 16:12:06

标签: .htaccess mod-rewrite parameters

我在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设置吗?

2 个答案:

答案 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