如何阻止.htaccess在403错误页面URL后附加lng参数?
解决403错误时URL附加多余lng参数的问题
问题根源在于第三重写规则未排除真实存在的文件和目录。当访问example.local/imgs(不带斜杠)这类真实目录时,Apache本应直接返回403,但你的规则先匹配了该路径,将imgs当作语言参数传递给index.php,最终导致错误页面URL带上多余的?lng=imgs。
只需在第三重写规则前添加两个条件,排除真实存在的文件和目录即可解决:
Options -Indexes RewriteEngine On RewriteBase / RewriteRule ^send-email$ send-msg-ajax.php [NC] RewriteRule ^cv$ docs/cv.pdf [NC] # 添加条件:排除真实存在的文件和目录 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-zA-z_-]+)$ index.php?lng=$1 [QSA,L] #custom error pages ErrorDocument 403 /error.php ErrorDocument 404 /error.php
规则说明
RewriteCond %{REQUEST_FILENAME} !-f:仅当请求路径不是真实存在的文件时,才执行后续重写规则RewriteCond %{REQUEST_FILENAME} !-d:仅当请求路径不是真实存在的目录时,才执行后续重写规则
修改后,访问真实存在的目录(如imgs)时,不会触发语言参数的重写规则,Apache会直接返回403错误页面,URL也不会附加多余的lng参数。
内容的提问来源于stack exchange,提问作者eskimopest
相关产品推荐
相关产品推荐

