2

我有这个重写规则

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

假设更改此 URL

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 和许多在线入门、教程和问题。

4

3 回答 3

5

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

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

您可能希望使用“如果文件不存在”条件使其不尝试第二次映射。

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

( 我想 )

于 2008-11-24T16:22:59.553 回答
3

在我看来,重写过滤器好像执行了两次。尝试添加最后一个标志

RewriteRule ^(.+)/?$ index.php?franchise=$1 [L]
于 2008-11-24T16:24:04.950 回答
2

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

于 2008-11-24T16:24:39.037 回答