RewriteCond for url with parameters

时间:2011-08-29 18:10:41

标签: apache mod-rewrite url-rewriting

我在重写网址时遇到了问题。 我想要这个:

http://www.foo.com/test.php?u=s1&id=12345&img=12

http://app.foo.com/12345-s1-12.test

第一个参数u是一个字符串,参数id和img是整数。

我从这样的事情开始:

RewriteCond %{REQUEST_URI} ^/test.php?u=(.*)&id=(.*)&img=(.*)/ [NC]
RewriteRule (.*) http://app.foo.com/%2-%1-%3.test [QSA,R=301,L]

谢谢:)

编辑:

仍然无效,但我很接近!

RewriteCond %{REQUEST_URI} ^/test.php [NC]
RewriteCond %{QUERY_STRING} ^u=(.*)&id=(.*)&img=(.*)
RewriteRule (.*) http://app.foo.com/%2-%1-%3.test [QSA,R=301,L]

现在它给了我链接:

http://app.foo.com/12345-s1-12.test?u=s1&id=12345&img=12

而不是:

http://app.foo.com/12345-s1-12.test

:(

2 个答案:

答案 0 :(得分:27)

解决!

RewriteCond %{REQUEST_URI} ^/test.php [NC]
RewriteCond %{QUERY_STRING} ^u=(.*)&id=(.*)&img=(.*)
RewriteRule (.*) http://app.foo.com/%2-%1-%3.test? [R=301,L]

在RewriteRule的末尾放置?会删除以前的查询字符串信息。

答案 1 :(得分:-1)

这完美无缺!我用过这个 - 但我想知道为什么目标网址最后会显示“%3f”。

我正在使用:

   RewriteCond %{REQUEST_URI} ^/ie/xx/yy.php [NC]
   RewriteCond %{QUERY_STRING} ^rubric=(.*)&nr=(.*)
   RewriteRule (.*) https://www.newdom.com/xx/yy.php?rubric=%1&nr=%2 [R=301,L]

为什么%3f在最后?