在带有两个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
答案 0 :(得分:1)
这两个条件重叠,因为这个正则表达式:
^([1-9]+)/.*/(.*)
也会匹配
^([1-9]+)/.*/(.*)
因此只有一个会开火。为什么不清楚地解释你的要求然后我们可以帮助你以明确的方式编写RewriteRule。
答案 1 :(得分: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]
如果这不是您需要的确切规则集,那至少应该让您更接近。