Apache中.htaccess重写含空格URL返回403错误求助
解决Apache重写含空格查询字符串导致的403 Forbidden错误
问题原因
Apache 2.4.19及以上版本的mod_rewrite新增了安全校验规则:当重写后的查询字符串包含空格(即使是URL编码后的%20)或控制字符时,会触发AH10411错误并返回403 Forbidden。你的场景中,多词搜索URL里的%20被重写到url参数中,正好触发了这个校验。
修复方案
修改/app/webroot/.htaccess中的重写规则,添加B(Escape Backreferences)标志,该标志会自动对重写后的反向引用内容(即$1)中的特殊字符进行URL编码,避免触发Apache的安全校验。
修改后的/app/webroot/.htaccess内容:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,B,L]
说明
B标志会将$1中的空格、&、=等特殊字符转义为合法的URL编码格式,确保传递给index.php的url参数符合Apache的校验要求。- 若修改后仍有问题,需确认Apache配置中已启用
mod_rewrite,且对应目录的AllowOverride设置为All(确保.htaccess规则生效)。
内容的提问来源于stack exchange,提问作者user198003
相关产品推荐
相关产品推荐

