Apache 使用参数重写url的条件

Apache 使用参数重写url的条件,apache,mod-rewrite,url-rewriting,Apache,Mod Rewrite,Url Rewriting,我在重写url时遇到了一个问题。 我想要这个: http://www.foo.com/test.php?u=s1&id=12345&img=12 到 第一个参数u是字符串,参数id和img是整数 我从这样的事情开始: RewriteCond %{REQUEST_URI} ^/test.php?u=(.*)&id=(.*)&img=(.*)/ [NC] RewriteRule (.*) http://app.foo.com/%2-%1-%3.test [QSA,R

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

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

第一个参数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
:(

已解决

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

放在重写规则的末尾将删除以前的查询字符串信息。

这非常有效!我使用了它-但我想知道为什么目标url在末尾显示“%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在末尾?

在Apache 2.4上,您可以使用
QSD
(查询字符串丢弃)标志,而不是在替换字符串的末尾追加
(空查询字符串)。
   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]