我已经尝试了很多方法来做这几天,而且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]
答案 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。