301 重定向查询参数和 ~ 在 URL

301 redirect with query parameters and ~ in URL

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

原文URL: https://www.foo.bar.com/~/bar.pdf?la

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

目前我的重写规则如下图:

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

如何编写同时考虑波浪号和查询参数的 301 重定向?

在此先感谢您的帮助!

你需要使用RewriteCond 检查 url 查询字符串的指令。你不能在 RewriteRule 中这样做。 url 中的查询字符串是 la .

RewriteEngine on

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

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

首先,RewriteRule ^/这里不适用所以RewriteRule ^就够了。 其次,你应该像这样转义 ~ RewriteRule ^\~ 最后,不要像 bar.pdf?la 这样用 RewriteRule 编写查询字符串,因为它不是 URI.

的一部分

该行应如下所示:

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

但是查询字符串可能附加到新目标,以防止在目标末尾添加 ? this :

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/ [R=301,L,NC]

所以,%1指的是这个条件RewriteCond %{QUERY_STRING} ^(.*)$</code>指的是这个条件<code>RewriteRule ^(.*)$等等。