【问题标题】:301 redirect with query parameters and ~ in URL使用查询参数和 URL 中的 ~ 进行 301 重定向
【发布时间】:2019-07-06 08:17:42
【问题描述】:

我有一个重定向问题,我想将带有查询参数的 url 完全重定向到另一个 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 重定向,同时考虑波浪号和查询参数?

提前感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    首先你的规则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]
    

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

    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 ^(.*)$ 等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      相关资源
      最近更新 更多