如何将 301 这个 link (https://www.example.com/?lang=en) 重定向到这个 link (https://www.example2.com/en/)?

How to redirect 301 this link (https://www.example.com/?lang=en) into this link (https://www.example2.com/en/)?

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

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

新 url: 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), but my result is this: https://www.example2.com/en/?lang=en.

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

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

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

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

新 url 2: https://www.example2.com/de/

还有这个链接:

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

新 url 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]

这个就可以了:

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

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