如果url包含某些参数,则使用.htaccess重定向站点
如果url包含某个参数,我将尝试使用.htaccess重定向我的站点 例如,当我的站点包含如果url包含某些参数,则使用.htaccess重定向站点,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,如果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 Redirec
?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
但这会导致错误太多的重定向
更新:我发现当它把这个放在我的.htaccess的末尾时,它就开始工作了
我发现当它把这个放在我的.htaccess
末尾时,它就开始工作了
这可能是由于先前的指令阻止了重定向循环(换句话说,存在冲突)。理想情况下,此重定向应该位于.htaccess
文件的开头附近
但是,您仍然应该放弃重定向响应中的查询字符串。目前,重定向到/de/
仍将包含lang=de
URL参数。Apache2.4上的QSD
标志将实现这一点。例如:
RewriteCond %{QUERY_STRING} (?:^|&)lang=(de)
RewriteRule !de/ /%1/ [QSD,R=permanent,L]
%1
反向引用包含查询字符串中捕获的“de”
我发现当它把这个放在我的.htaccess
末尾时,它就开始工作了
这可能是由于先前的指令阻止了重定向循环(换句话说,存在冲突)。理想情况下,此重定向应该位于.htaccess
文件的开头附近
但是,您仍然应该放弃重定向响应中的查询字符串。目前,重定向到/de/
仍将包含lang=de
URL参数。Apache2.4上的QSD
标志将实现这一点。例如:
RewriteCond %{QUERY_STRING} (?:^|&)lang=(de)
RewriteRule !de/ /%1/ [QSD,R=permanent,L]
%1
反向引用包含在查询字符串中捕获的“de”。由于重写目标不包含查询字符串,原始查询字符串将再次附加到它。如果您使用的是Apache2.4,请使用QSD
标志来防止出现这种情况;如果是较低版本,也可以通过在目标URL的末尾添加一个问号来丢弃原始查询字符串。那么/foo?lang=de
格式的URL呢?重定向中是否应保留URL路径?例如,/de/foo
由于重写目标不包含查询字符串,原始查询字符串将再次附加到它。如果您使用的是Apache2.4,请使用QSD
标志来防止出现这种情况;如果是较低版本,也可以通过在目标URL的末尾添加一个问号来丢弃原始查询字符串。那么/foo?lang=de
格式的URL呢?重定向中是否应保留URL路径?例如,/de/foo