1

我想在一个站点上重写两件事。

mysite.com/something -> mystie.com/index.php?s=something

mysite.com/something/another -> mysite.com/index.php?s=something&d=another

这是我的 htaccess

RewriteEngine on
RewriteRule ^(.+)$ index.php?s=$1 [L,QSA]
RewriteRule ^(.+)/(.+)$ index.php?s=$1&d=$2 [L,QSA]

两者分开工作,但在一起他们不...

4

3 回答 3

1

我猜问题是您在第一条规则中匹配“/”字符。最简单的解决方案不是简单地将字符类添加到您的规则中,例如:

RewriteRule ^([a-z0-9]+)$ index.php?s=$1 [L,QSA]
RewriteRule ^([a-z0-9]+)/([a-z0-9]+)$ index.php?s=$1&d=$2 [L,QSA]

或者只是改变规则的顺序:

RewriteRule ^(.+)/(.+)$ index.php?s=$1&d=$2 [L,QSA]
RewriteRule ^(.+)$ index.php?s=$1 [L,QSA]
于 2013-08-08T00:10:07.703 回答
0

颠倒两条规则。重写引擎逐行依次遍历文件。您拥有的第一条规则:

RewriteRule ^(.+)$ index.php?s=$1 [L,QSA]

匹配具有两个名称值对的 url,因此文件在第一次匹配后停止处理,因为您使用的是 L 标志。

RewriteRule ^(.+)/(.+)$ index.php?s=$1&d=$2 [L,QSA]
RewriteRule ^(.+)$ index.php?s=$1 [L,QSA]

我没有时间为你测试这个,对不起。但我强烈地感觉到这就是问题所在。在我写这个答案时,有人给出了几乎相同的建议。我想删除我的答案,但想确保您了解 L 标志并且文件是按顺序处理的。

于 2013-08-08T00:16:16.960 回答
0
RewriteEngine on
RewriteRule ^([a-z0-9]+)$ index.php?s=$1 [L,QSA]
RewriteRule ^([A-Za-z0-9]+)/(.+)$ index.php?s=$1&d=$2 [L,QSA]

这行得通。更改顺序无效。我也忘了补充

mysite.com/something/another

another字符串可以像 asd-1231-ASDwqda 。

于 2013-08-08T08:15:25.317 回答