0

在具有两个 RewriteRules 的 htaccess 文件上,每个都单独工作,但不能同时工作

RewriteRule  ^([1-9]+)/.*/(.*) /sortir/index.php?com=page1&t=$1&l=$2 [QSA]

RewriteRule  ^([1-9]+)/([1-9]+)/.*  /sortir/index.php?com=page2&t=$1&v=$2 [QSA]

如果我先删除,第二个作品。
如果我删除第二个,第一个工作。

第一个调用的链接如下:

http://example.com/33/xxxx/city所以 1 美元是 33 美元,2 美元是城市

第二个调用的链接如下:

http://example.com/33/432/xxxx/city/yyyyy所以 1 美元是 33,2 美元是 432

4

2 回答 2

1

由于这个正则表达式,这两个条件都是重叠的:

^([1-9]+)/.*/(.*)

也会匹配

^([1-9]+)/.*/(.*)

因此只有一个会开火。您为什么不清楚地解释您的要求,那么我们可以帮助您以明确的方式编写 RewriteRule。

于 2013-02-13T17:12:25.800 回答
1

虽然,正如 anubhava 所指出的,更多细节会有所帮助,但我至少可以指出您当前规则的一些问题。

首先,颠倒规则的顺序。第二条规则不太通用,因为它以两个数字部分和额外的文本部分开始。首先匹配,然后匹配更一般的规则。

其次,以 L 标志结束每个规则,否则在第一个规则完成后将继续处理第二个规则。

第三,更新你的匹配,使它们不匹配斜线。这会强制模式匹配您正在寻找的确切目录结构,而不是匹配任意数量的目录级别。

考虑到这些事情,这里有一些更新的规则可供使用:

第一条规则匹配http://example.com/33/432/xxxx/city/yyyy

第二条规则匹配http://example.com/33/xxxx/city

RewriteRule  ^([1-9]+)/([1-9]+)/[^/]+/[^/]+/.*  /sortir/index.php?com=page2&t=$1&v=$2 [QSA, L]
RewriteRule  ^([1-9]+)/[^/]*/([^/]*)$ /sortir/index.php?com=page1&t=$1&l=$2 [QSA, L]

如果这不是您需要的确切规则集,它至少应该让您更接近。

于 2013-02-14T01:47:55.420 回答