[英]mod_rewrite QUERY_STRING value to new URL
我已经尝试了很多方法来进行此操作几天,但仍然以某种方式无法实现。 让我发疯。 似乎应该相对容易。...我需要将流量从旧应用程序重写为新应用程序,但是传递的值格式不同。
这: http://oldapp.com/download.aspx?filename=FILE-01.pdf
: http://oldapp.com/download.aspx?filename=FILE-01.pdf
必须重写为: https://NEWapp.com/this/that/FILE-01.pdf
: https://NEWapp.com/this/that/FILE-01.pdf
因此,我必须将值从QUERY_STRING(在此示例中为FILE-01.pdf
,并将其合并到新的URL中。 QUERY_STRING中始终只有一个名称/值对,并且始终为“ download.aspx?filename =“。
看起来真的很简单,对吧? 但是我一直想念它。 我已经尝试了很多这种变化:
RewriteEngine On
RewriteCond %{QUERY_STRING} filename=([\S\s]+)
RewriteRule ^(.*)$ https://NEWapp.com/this/that/$1 [R,L]
我正在使用IBM HTTP Server v8.0,它基本上是Apache 2.2。
解:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^filename=([^&]+)
RewriteRule ^(.*)$ https://NEWapp.com/this/that/%1? [R,L]
尝试:
RewriteEngine On
RewriteCond %{QUERY_STRING} filename=([^&]+)
RewriteRule ^download.aspx$ https://NEWapp.com/this/that/%1 [R,L]
当您从RewriteCond
访问捕获组时,需要使用反向引用运算符%
而不是$
前缀,后者将用于RewriteRule
捕获组
在arco444之后,我会在末尾添加一个问号,以确保查询字符串也不会到达URL的末尾。
RewriteEngine On
RewriteCond %{QUERY_STRING} ^filename=([^&]+)
RewriteRule ^download.aspx https://NEWapp.com/this/that/%1? [R,L]
如果您不添加问号,则最终网址将为https://NEWapp.com/this/that/FILENAME.ext?filename=FILENAME.ext
解:
看来,arco444的出色答案应该做到了这一点,但是,这终于奏效了:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^filename=([^&]+)
RewriteRule ^(.*)$ https://NEWapp.com/this/that/%1? [R,L]
我不明白为什么这样行得通,而download.aspx上的特定匹配行不通,但是我很高兴有一个解决方案。 非常感谢arco444和Dekel。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.