在.htaccess中无法使用反向引用$1,重定向遇权限禁止问题求助
解决.htaccess重定向403 Forbidden及反向引用问题
先处理规则循环问题:你的规则缺少终止标志,重写后的请求可能再次触发规则,被服务器判定为恶意循环从而返回403。给规则加上
[L](停止后续规则处理)或[END](彻底终止重写流程,Apache 2.4+支持)标志:RewriteEngine On RewriteRule ^.*media(.*)$ /project/file.php?v=$1 [L]若使用Apache 2.4及以上版本,推荐用
[END]避免后续可能的重写触发:RewriteEngine On RewriteRule ^.*media(.*)$ /project/file.php?v=$1 [END]精准匹配URL,缩小匹配范围:原正则
^.*media(.*)$会匹配所有包含media的URL,可能误匹配到其他受保护资源。如果你的目标URL是xxx/media/yyy这类结构,可以收紧正则,只匹配media特定位置的路径:RewriteEngine On RewriteRule ^media/(.*)$ /project/file.php?v=$1 [L]排除目标文件的重复匹配:如果重写后的
/project/file.php路径中意外包含media字符串,会导致规则反复触发,添加条件排除目标文件:RewriteEngine On RewriteCond %{REQUEST_URI} !^/project/file.php RewriteRule ^.*media(.*)$ /project/file.php?v=$1 [L]检查文件权限:403错误也可能是
/project/file.php文件权限不足,确保文件权限设为644,所在目录权限设为755。
关于反向引用的补充说明:
$1是RewriteRule正则捕获的分组,对应media后的内容,只要正则匹配逻辑正确就会正常返回值;%1是RewriteCond正则捕获的分组,你的规则里没有配置RewriteCond,所以%1自然无返回值;- 使用
%{REQUEST_URI}时出现问题,大概率也是循环重写导致的,加上终止标志即可解决。
内容的提问来源于stack exchange,提问作者habibhassani
相关产品推荐
相关产品推荐

