.htaccess重写规则移动端不生效,正则表达式存在什么问题?
.htaccess重定向规则移动端不生效问题
问题详情
我在.htaccess文件最顶部添加了如下规则,意图将所有指向example.com/feedback(包含任意尾随参数)的请求转发到random.php,由该PHP文件计算后重定向到新URL:
# BEGIN Random redirect Fedbackurl RewriteEngine On RewriteRule ^.example.com/feedback/?.$ /random.php [L] # END Random redirect Feedbackurl
该规则在桌面端正常工作,但移动端无法触发重定向,访客会直接停留在example.com/feedback/。
对应的random.php代码:
<?php $random = rand(1,17); $query = $_SERVER['QUERY_STRING']; header("Location: https://example.com/feedbackformular?sp=".$random."&".$query); exit(); ?>
我已经尝试将这段.htaccess代码移至文件最顶部,排除其他代码干扰,但问题仍未解决。
解决办法
1. 修正RewriteRule正则表达式
原规则的核心问题是正则匹配逻辑错误:在.htaccess环境中,RewriteRule的匹配对象是去掉域名和查询参数后的请求路径,不需要写example.com;原正则^.example.com/feedback/?.$会错误限制匹配范围,导致移动端部分请求无法触发规则。
替换为正确的规则:
# BEGIN Random redirect Feedbackurl RewriteEngine On RewriteRule ^feedback(/.*)?$ /random.php [L,QSA] # END Random redirect Feedbackurl
^feedback(/.*)?$:匹配所有以feedback开头的路径,覆盖带斜杠、子路径、参数等各种情况QSA(Query String Append):自动保留原请求的查询参数,避免参数丢失
2. 额外排查点
- 检查移动端请求的实际路径:部分移动端浏览器/APP可能会自动添加斜杠或修改路径格式,新规则已覆盖这类场景
- 若问题依旧,开启Apache重写日志(配置
RewriteLogLevel 3),查看移动端请求的匹配过程,定位具体不触发的原因
内容的提问来源于stack exchange,提问作者KaareMulvad
相关产品推荐
相关产品推荐

