【问题标题】:httaccess 301 redirect without URL variableshtaccess 301 重定向没有 URL 变量
【发布时间】:2021-01-06 11:40:31
【问题描述】:

我在进行 301 重定向时遇到问题。

我的旧网址是

https://example.com/es/component/users/registration?item=21

新的

https://example.com/es/login/registro

所以,我写在.htaccess

RewriteRule ^es\/component\/users\/registration\/?item=21$  "https://mywebsite.com/es/login/registro" [R=301,L]

但它重定向到https://mywebsite.com/es/login/registro?item=21

我怎样才能摆脱这个?item=21 字符串呢?

【问题讨论】:

    标签: .htaccess redirect http-status-code-301


    【解决方案1】:

    除非? 在请求中被URL 编码(如%3F)并且没有实际的查询字符串,否则您发布的指令实际上不会执行所述重定向?或者您看到来自较早(错误)尝试的缓存响应? (301 重定向将被浏览器永久缓存。)

    RewriteRule 模式 仅匹配 URL 路径,而不匹配查询字符串。要匹配查询字符串,您需要一个额外的 RewriteCond 指令并检查 QUERY_STRING 服务器变量。

    请尝试以下方法:

    RewriteCond %{QUERY_STRING} ^item=21$
    RewriteRule ^es/component/users/registration$ /es/login/registro [QSD,R=302,L]
    

    QSD(查询字符串丢弃)标志 (Apache 2.4+) 从重定向响应中删除查询字符串。否则,默认操作是从请求中附加查询字符串。如果您使用的是 Apache 2.2,那么您需要将 ? 附加到 substitution 字符串的末尾(实际上是附加一个空查询字符串)。

    RewriteRule模式中的斜杠无需反斜杠转义。

    当您确定它工作正常时,先使用 302(临时)重定向进行测试,然后再更改为 301(如果这是有意的话),以避免潜在的缓存问题。

    您需要在测试前清除浏览器缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 2022-12-09
      • 2019-02-23
      相关资源
      最近更新 更多