使用.htaccess移除utm_campaign参数时自动添加index.php的求助
解决utm_campaign参数移除后自动添加index.php的问题
你的问题核心是现有Rewrite规则和隐藏index.php的路由规则冲突,加上原规则写法未正确处理查询参数,导致跳转时触发了index.php的路径解析。试试下面的.htaccess配置:
# 优先处理utm_campaign参数移除跳转 RewriteCond %{QUERY_STRING} (^|&)utm_campaign=[^&]+(&|$) [NC] RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD] # 保留你原本隐藏index.php的规则(注意顺序要在上面规则之后) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
关键调整说明:
- 用
%{REQUEST_URI}替代硬编码域名和$1,避免路径解析时出现错误拼接 QSD标记(Apache 2.4及以上版本支持)可直接丢弃所有查询参数,无需手动处理参数拼接- 把utm参数处理规则放在隐藏index.php规则前面,确保先完成参数移除跳转,再执行路由解析
如果你的Apache版本低于2.4,不支持QSD,可改用以下写法兼容:
# 移除utm_campaign参数,保留其他可能存在的参数 RewriteCond %{QUERY_STRING} ^(.*)(^|&)utm_campaign=[^&]+(&)(.*)$ [NC] RewriteRule ^ %{REQUEST_URI}?%1%4 [L,R=301] RewriteCond %{QUERY_STRING} ^(.*)(&)utm_campaign=[^&]+$ [NC] RewriteRule ^ %{REQUEST_URI}?%1 [L,R=301] RewriteCond %{QUERY_STRING} ^utm_campaign=[^&]+(&)(.*)$ [NC] RewriteRule ^ %{REQUEST_URI}?%2 [L,R=301] RewriteCond %{QUERY_STRING} ^utm_campaign=[^&]+$ [NC] RewriteRule ^ %{REQUEST_URI}? [L,R=301] # 隐藏index.php的规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
配置完成后,访问website.com/page?utm_campaign=CAMPAIGN会正确跳转到website.com/page,不会出现index.php路径。
内容的提问来源于stack exchange,提问作者Emma Swann
相关产品推荐
相关产品推荐

