我想在一个网站上重写两件事。
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]
另外两者都有效,但他们没有......
答案 0 :(得分: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]
答案 1 :(得分: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标志,并按顺序处理文件。
答案 2 :(得分: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。