mod_rewrite QUERY_STRING值到新URL

时间:2015-06-23 15:20:09

标签: apache mod-rewrite query-string

我已经尝试了很多方法来做这几天,而且STILL莫名其妙地无处可去。让我发疯似乎它应该相对容易.... 我需要重写从旧应用程序到新应用程序的流量,但传递的值的格式是不同的 这个: 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中始终只有一个名称/值对,它始终是“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。

SOLUTION:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^filename=([^&]+)
RewriteRule ^(.*)$ https://NEWapp.com/this/that/%1? [R,L]

3 个答案:

答案 0 :(得分:0)

尝试:

RewriteEngine On
RewriteCond %{QUERY_STRING} filename=([^&]+)
RewriteRule ^download.aspx$ https://NEWapp.com/this/that/%1 [R,L]

当您从RewriteCond访问捕获组时,您需要使用反向引用运算符%而不是$前缀,该前缀将用于{{1}中的捕获组}

答案 1 :(得分:0)

关注arco444后,我会在末尾添加一个问号,以确保查询字符串也不会到达网址的末尾。

$mime_type

如果您不添加问号,最终网址将为RewriteEngine On RewriteCond %{QUERY_STRING} ^filename=([^&]+) RewriteRule ^download.aspx https://NEWapp.com/this/that/%1? [R,L]

答案 2 :(得分:0)

<强> SOLUTION:

看起来arco444的优秀答案应该是这样做的,但是,这才是最终的作用:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^filename=([^&]+)
RewriteRule ^(.*)$ https://NEWapp.com/this/that/%1? [R,L]

我不明白为什么这种方法有效并且在download.aspx上没有特定的匹配,但我很高兴有一个解决方案。 非常感谢arco444和Dekel。