繁体   English   中英

mod_rewrite QUERY_STRING值到新的URL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM