5

关于这个主题似乎没有太多信息,所以我将概述我的具体问题,然后也许我们可以将问题和答案塑造成更普遍的东西。

我有这个重写规则

RewriteEngine On
RewriteBase /bookkeepers/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
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/kings-lynn/

然后查询字符串返回为

franchise=kings-lynn/

由于某种原因,我的 CSS 和 Javascript 文件都没有被加载。

有任何想法吗?

4

2 回答 2

10

正如@Paul Tomblin 所说, .+ 是贪婪的;也就是说,它尽可能地匹配。

^(.+[^/])/?$告诉它匹配任何内容,后跟一个不是 / 的字符,然后是可选的 /。这具有不捕获尾随 / 的效果。

您的 CSS 和 Javascript 不起作用的最可能原因是您使用的是相对路径,例如 src="my.js"。当尾部有斜线时,它看起来像一个目录,因此您的浏览器将查找 /location/kings-lynn/my.js。您可以简单地通过使用文件的绝对路径(例如/location/my.js)来解决此问题。

于 2008-11-24T17:48:33.110 回答
6

看起来 (.+) 正在被贪婪匹配。在这种情况下,您可以尝试

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

这确保第一组(在括号中)不会以斜线结尾。

于 2008-11-24T17:41:15.590 回答