Mod rewrite Mod rewrite尾部斜杠问题

Mod rewrite Mod rewrite尾部斜杠问题,mod-rewrite,Mod Rewrite,关于这个主题,似乎没有太多的信息,所以我将概述我的具体问题,然后也许我们可以将问题和答案塑造成更具普遍性的东西 我有重写规则 RewriteEngine On RewriteBase /bookkeepers/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)/?$ index.php?franchise=$1 哪个是更改此URL的 http://example.c

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

我有重写规则

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文件都没有被加载

有什么想法吗?

看起来(++)正在被匹配。那样的话,你可以试试

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

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

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

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


CSS和Javascript无法工作的最可能原因是使用了相对路径,如src=“my.js”。当有尾随斜杠时,它看起来像一个目录,因此您的浏览器将查找/location/kings-lynn/my.js。您只需使用文件的绝对路径(例如/location/my.js)即可解决此问题。

Nice。这修复了我的尾部斜杠问题(但不是缺少CSS的问题)。不要以为你可以详细说明它是如何工作的,可以吗?正则表达式匹配一个由1个或多个字符组成的组,后跟除斜杠以外的任何字符。在组外,您可以选择匹配斜杠。在我更改之前,斜杠可能已经在组中结束了。我已经发布了一个关于正则表达式匹配的答案。要解决CSS/Javascript问题,您应该查看服务器日志以查看请求的内容。你可能需要在规则中加上一个[R,L],但我从来没有理解过这一部分。