RewriteCond for url with parameters

Cra*_*Max 14 apache mod-rewrite url-rewriting

我有一个问题要重写一个网址.我要这个 :

http://www.foo.com/test.php?u=s1&id=12345&img=12
Run Code Online (Sandbox Code Playgroud)

http://app.foo.com/12345-s1-12.test
Run Code Online (Sandbox Code Playgroud)

第一个参数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]
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

编辑:

仍然不起作用,但我很接近!

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]
Run Code Online (Sandbox Code Playgroud)

现在它给了我链接:

http://app.foo.com/12345-s1-12.test?u=s1&id=12345&img=12
Run Code Online (Sandbox Code Playgroud)

代替 :

http://app.foo.com/12345-s1-12.test
Run Code Online (Sandbox Code Playgroud)

:(

Cra*_*Max 28

解决了!

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

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

  • 在 Apache 2.4 上,您可以使用“QSD”(查询字符串丢弃)标志,而不是将“?”(空查询字符串)附加到 _substitution_ 字符串的末尾。 (2认同)