301使用查询参数和URL中的〜重定向

时间:2019-02-12 16:08:38

标签: regex apache mod-rewrite http-status-code-301

我有一个重定向问题,我想将带有查询参数的网址完全重定向到另一个PDF,例如:

原始网址: https://www.foo.bar.com/~/bar.pdf?la

重定向网址: https://www.bar.foo.com/foo.pdf

目前,我的重写规则如下所示:

RewriteRule ^/~/bar.pdf?la https://www.bar.foo.com/foo.pdf [R=301,L,NC]

如何编写一个同时包含代字号和查询参数的301重定向?

在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

首先,您的规则RewriteRule ^/~/bar.pdf?la https://www.bar.foo.com/foo.pdf [R=301,L,NC]有几个问题。

首先,RewriteRule ^/在这里不适用,因此RewriteRule ^就足够了。 其次,您应该像这样~来逃避RewriteRule ^\~ 最后,不要像RewriteRule那样用bar.pdf?la写查询字符串,因为它不是URI的特征。

该行应如下所示:

RewriteRule ^\~/bar.pdf https://www.bar.foo.com/foo.pdf [R=301,L,NC]

但是查询字符串可以追加到新的target,以防止在目标的末尾添加?

RewriteRule ^\~/bar.pdf https://www.bar.foo.com/foo.pdf? [R=301,L,NC]

如果要使用查询字符串值,可以在此条件之前添加条件以加以利用:

RewriteCond %{QUERY_STRING} ^(.*)$

您可以将^(.*)$更改为所需的内容,并可以在目标中使用它,例如以下示例:

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$  https://www.whatever.com/%1/$1 [R=301,L,NC]

因此,%1指的是这种情况RewriteCond %{QUERY_STRING} ^(.*)$,而$1指的是这种情况RewriteRule ^(.*)$,依此类推。

答案 1 :(得分:0)

您需要使用RewriteCond  指令以检查url查询字符串。您无法在RewriteRule中这样做。网址中的查询字符串为la

RewriteEngine on

RewriteCond ℅{QUERY_STRING} ^la$ [NC]
RewriteRule ^.*bar\.pdf$ /foo.pdf? [L,R=301]
相关问题