htaccess同域名重定向异常:URL追加参数致站点崩溃求助
问题分析与解决方案
问题背景
同一域名下配置了两条永久重定向规则,但从原页面点击重定向链接时,URL会自动追加语言参数(?strLangue=fr),进而导致站点崩溃。原重定向规则如下:
Redirect permanent /fr/pages/8-ever-l/ /fr/artists/1-everl-l/ Redirect permanent /fr/pages/9-arnaud-bissot/ /fr/artists/2-arnaud-bissot/
核心原因
你使用的Redirect permanent属于Apache的mod_alias模块,它的默认行为是自动传递原URL的所有查询字符串。当原链接带有?strLangue=fr参数时,这个参数会被直接追加到目标URL末尾,导致目标页面接收到意料之外的参数,最终引发站点崩溃。
解决方案
方案1:完全丢弃查询字符串
改用mod_rewrite模块的规则,通过规则末尾的?明确告知Apache不传递原查询字符串:
RewriteEngine On RewriteRule ^/fr/pages/8-ever-l/$ /fr/artists/1-everl-l/? [R=301,L] RewriteRule ^/fr/pages/9-arnaud-bissot/$ /fr/artists/2-arnaud-bissot/? [R=301,L]
这里的?是关键,它会清空原URL的查询参数,确保目标URL干净无额外参数。
方案2:仅移除特定语言参数(保留其他参数)
如果需要保留原URL中的其他查询参数,只移除strLangue=fr,可以使用以下规则:
RewriteEngine On # 处理第一条重定向 RewriteCond %{QUERY_STRING} ^(.*&)?strLangue=fr(&.*)?$ RewriteRule ^/fr/pages/8-ever-l/$ /fr/artists/1-everl-l/?%1%2 [R=301,L] # 处理第二条重定向 RewriteCond %{QUERY_STRING} ^(.*&)?strLangue=fr(&.*)?$ RewriteRule ^/fr/pages/9-arnaud-bissot/$ /fr/artists/2-arnaud-bissot/?%1%2 [R=301,L]
这个规则会匹配并移除strLangue=fr参数,同时保留其他可能存在的查询参数。
内容的提问来源于stack exchange,提问作者Gerits Aurelien
相关产品推荐
相关产品推荐

