我有一个网址:
http://www.example.com/details.php?var=100&p=99
我想使用 mod rewrite 重写它
http://www.example.com/100/99
我正在使用以下 rewite_rule:
RewriteRule ^([0-9]+)/([0-9]+) $ http://www.example.com/details.php?var=$1&p=$2 [L]
但它不起作用。如果我输入,http://www.example.com/100/99
它会重定向到http://www.example.com/details.php?var=100&p=99
url。请帮我解决这个问题。谢谢
答案1
你的方法的问题是
^([1-9]+)
URI 以/
- 开头,你告诉规则检查一些数字而不/
- 您的 URL 中可能会有零,因此 having
1-9
不会允许您使用零。
尝试这个:
RewriteRule ^/([0-9]*)/([0-9]*) http://www.example.com/details.php?var=$1&p=$2 [L]
您可以在此处验证您的重写规则 -http://martinmelin.se/rewrite-rule-tester/
答案2
如果是关于*重定向*,然后http://...
从目标部分中删除前缀。
RewriteRule ^(\d+)/(\d+)$ details.php?var=$1&p=$2 [L]
将此作为第一条规则。
还请记住,您必须调整应用程序以实际生成 /123/456 网址。重写规则仅适用于传入请求,它不会更改页面。
答案3
在正则表达式中包含 0:
RewriteRule ^/([0-9]+)/([0-9]+)/?$ http://www.example.com/details.php?var=$1&p=$2 [L]
相反的情况是:
RewriteCond %{QUERY_STRING} ^var=([0-9]+)\&p=([0-9]+)$
RewriteRule ^details\.php$ http://www.example.com/%1/%2 [R=301,L]