mod_rewrite QUERY_STRING 值到新值 URL
mod_rewrite QUERY_STRING value to new URL
几天来我已经尝试了很多方法来做到这一点,但仍然不知何故无处可去。让我发疯。看起来应该是相对容易的....
我需要将旧应用程序的流量重写到新应用程序,但传递的值的格式不同。
这个:
http://oldapp.com/download.aspx?filename=FILE-01.pdf
必须重写为:
https://NEWapp.com/this/that/FILE-01.pdf
所以我必须从 QUERY_STRING 中提取值,在本例中是 FILE-01.pdf
,并将其合并到新的 URL 中。在 QUERY_STRING 中总是只有一对 name/value,并且总是 "download.aspx?filename="。
看起来很简单,对吧?但我一直想念它。我已经尝试了很多很多这样的变体:
RewriteEngine On
RewriteCond %{QUERY_STRING} filename=([\S\s]+)
RewriteRule ^(.*)$ https://NEWapp.com/this/that/ [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]
如果您不添加问号,最后的 url 将是 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。
几天来我已经尝试了很多方法来做到这一点,但仍然不知何故无处可去。让我发疯。看起来应该是相对容易的....
我需要将旧应用程序的流量重写到新应用程序,但传递的值的格式不同。
这个:
http://oldapp.com/download.aspx?filename=FILE-01.pdf
必须重写为:
https://NEWapp.com/this/that/FILE-01.pdf
所以我必须从 QUERY_STRING 中提取值,在本例中是 FILE-01.pdf
,并将其合并到新的 URL 中。在 QUERY_STRING 中总是只有一对 name/value,并且总是 "download.aspx?filename="。
看起来很简单,对吧?但我一直想念它。我已经尝试了很多很多这样的变体:
RewriteEngine On
RewriteCond %{QUERY_STRING} filename=([\S\s]+)
RewriteRule ^(.*)$ https://NEWapp.com/this/that/ [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]
如果您不添加问号,最后的 url 将是 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。