首页 > 解决方案 > 如果 url 包含某些参数,则使用 .htaccess 重定向站点

问题描述

如果 url 包含某个参数,我正在尝试使用 .htaccess 重定向我的网站。

例如,当我的站点包含 时?lang=de,我希望将站点永久重定向到https://www.example.com/de/

这是我尝试过的:

# BEGIN Redirects for mobile params
RewriteEngine On
RewriteCond %{REQUEST_URI} lang=de
RewriteRule .* https://www.example.com/de/
# END Redirects for mobile params

任何帮助将不胜感激,谢谢

更新:这是我现在正在尝试的,但我得到:

# BEGIN Redirects for mobile params
RewriteEngine on
# if the query string contains a parameter called "lang"
RewriteCond %{QUERY_STRING} (?:^|&)lang=de
# then redirect (permanently) to /
RewriteRule ^ https://www.example.com/de/ [L,R=permanent]
# END Redirects for mobile params

但这会导致 ERR_TOO_MANY_REDIRECTS

更新:我发现当它把它放在我的 .htaccess 末尾时,它就开始工作了。

标签: .htaccessmod-rewrite

解决方案


我发现当它把它放在我的末尾时.htaccess,它就开始工作了。

这可能是由于早期的指令阻止了重定向循环(换句话说,存在冲突)。理想情况下,此重定向应位于.htaccess文件开头附近。

但是,您仍应从重定向响应中丢弃查询字符串。就目前而言,您的重定向/de/仍将包含lang=deURL 参数。Apache 2.4 上的QSD标志将执行此操作。例如:

RewriteCond %{QUERY_STRING} (?:^|&)lang=(de)
RewriteRule !de/ /%1/ [QSD,R=permanent,L]

%1反向引用包含在查询字符串中捕获的“de” 。


推荐阅读