【问题标题】:How to redirect 301 this link (https://www.example.com/?lang=en) into this link (https://www.example2.com/en/)?如何将 301 这个链接(https://www.example.com/?lang=en)重定向到这个链接(https://www.example2.com/en/)?
【发布时间】:2019-06-16 04:13:28
【问题描述】:

我正在尝试从我的 .htaccess 文件中的此链接执行重定向 301。

旧网址:https://www.example.com/?lang=en

新网址:https://www.example2.com/en/

我会尝试使用这个指令:

RewriteCond   %{REQUEST_URI}    ^/$

RewriteCond   %{QUERY_STRING}   ^lang=en$

RewriteRule   ^(.*)$   /en/     [R=301,L]

喜欢这个问题的答案 (301 redirect from URL with query string to new domain with different query string),但我的结果是:https://www.example2.com/en/?lang=en

如何删除查询字符串“?lang=en”并获取新的 url?

现在它可以添加标志 QSD,但现在我遇到了这个问题:

我也需要重定向这个链接:

旧网址2:https://www.example.com/?lang=de

新网址 2:https://www.example2.com/de/

还有这个链接:

旧网址3:https://www.example.com/?lang=ru

新网址 3:https://www.example2.com/ru/

如果我使用上面的指令,更改查询字符串,重定向不适用于所有语言。

RewriteCond   %{REQUEST_URI}    ^/$

RewriteCond   %{QUERY_STRING}   ^lang=en$

RewriteRule   ^(.*)$   /en/     [R=301,L,QSD]



RewriteCond   %{REQUEST_URI}    ^/$

RewriteCond   %{QUERY_STRING}   ^lang=de$

RewriteRule   ^(.*)$   /de/     [R=301,L,QSD]



RewriteCond   %{REQUEST_URI}    ^/$

RewriteCond   %{QUERY_STRING}   ^lang=ru$

RewriteRule   ^(.*)$   /ru/     [R=301,L,QSD]

我该如何解决这个新问题?

编辑 2:

@QuickBecko 的解决方案

有两种解决方案,具体取决于 Apache 版本:

第一个解决方案

RewriteCond   %{REQUEST_URI}    ^/$
RewriteCond   %{QUERY_STRING}   ^lang=en$
RewriteRule   ^(.*)$   /en/     [R=301,L,QSD]
RewriteCond   %{QUERY_STRING}   ^lang=de$
RewriteRule   ^(.*)$   /de/     [R=301,L,QSD]
RewriteCond   %{REQUEST_URI}    ^/$
RewriteCond   %{QUERY_STRING}   ^lang=ru$
RewriteRule   ^(.*)$   /ru/     [R=301,L,QSD]

第二种解决方案

RewriteCond   %{QUERY_STRING}   ^lang=en$
RewriteRule   ^(.*)$   /en/?     [R=301,L]
RewriteCond   %{QUERY_STRING}   ^lang=de$
RewriteRule   ^(.*)$   /de/?     [R=301,L]
RewriteCond   %{QUERY_STRING}   ^lang=ru$
RewriteRule   ^(.*)$   /ru/?     [R=301,L]

【问题讨论】:

  • 阅读文档,我建议。我清楚地指出了您要在此处使用的QSD 标志...
  • 或者您可以使用?(问号)删除旧的查询字符串,RewriteRule ^(.*)$ /en/? [R=301,L]
  • 适用于 QSD,但现在我有一个新问题,我编辑答案
  • 对于更新的一个,你不需要RewriteCond %{REQUEST_URI} ^/$每个只保留一个在顶部而不是删除其他
  • @Whatatimetobealive 非常感谢,现在可以使用了,感谢大家

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


【解决方案1】:

这个可以完成这项工作:

RewriteCond %{QUERY_STRING} ^lang=en$
RewriteRule ^$ https://www.example2.com/en/?  [R=301,L]

基本上,如果您在末尾添加?,它将从链接中删除查询。

【讨论】:

  • 很高兴听到这个消息。如果此答案对您有用,请接受答案。
  • @AlessioPuccini 你好,我也有同样的问题,但是当我在.htaccess添加这段代码时,页面显示error 404,你是怎么解决这个问题的?
  • @QuickBecko 用解决方案编辑问题,尝试使用其中之一
猜你喜欢
  • 2021-08-25
  • 2019-11-07
  • 2023-03-27
  • 2011-03-11
  • 1970-01-01
  • 2011-07-06
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多