我有一个重定向问题,我想将带有查询参数的网址完全重定向到另一个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重定向?
在此先感谢您的帮助!
答案 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]