Mod-rewrite shenanigans

时间:2008-11-24 16:20:40

标签: mod-rewrite

我有这个重写规则

RewriteEngine On
RewriteBase /location/
RewriteRule ^(.+)/?$ index.php?franchise=$1

假设要更改此网址

http://example.com/location/kings-lynn

进入这个

http://example.com/location/index.php?franchise=kings-lynn

但相反,我得到了这个

http://example.com/location/index.php?franchise=index.php

此外,添加栏杆斜线会打破它。我得到index.php页面,但没有样式表或javascript正在加载。

我显然做了一些非常错误但我不知道尽管在这里花了一整天R'ingTFM和许多在线引物和教程和问题。

3 个答案:

答案 0 :(得分:5)

您的问题是您要重定向两次。

'location/index.php'匹配正则表达式^(.+)/?$

您希望可能使用“if file not exists”条件使其不再尝试映射。

RewriteEngine on
RewriteBase /location/
RewriteCond %{REQUEST_FILENAME} !-f   # ignore existing files
RewriteCond %{REQUEST_FILENAME} !-d   # ignore existing directories
RewriteRule ^(.+)/?$ index.php?franchise=$1  [L,QSA]

另外,[L,QSA]试图使其成为“最后”规则(注意,这并不完全明显它是如何工作的)并将查询字符串附加到查询中,以便

location/foobar/?baz=quux  ==> index.php?franchise=$1&baz=quux

(我认为)

答案 1 :(得分:3)

听起来好像重写过滤器正在执行两次。尝试添加最后一个标志

RewriteRule ^(.+)/?$ index.php?franchise=$1 [L]

答案 2 :(得分:2)

您的规则自我匹配,因此它将引用自身。