【发布时间】: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