mod_rewrite配置问题:非目录非文件请求重定向到404页
现有配置完全不符合需求,存在三处核心问题:
- 条件逻辑倒置:现有规则的判断条件是「请求对应真实存在的文件 或 真实存在的目录」,反而会把合法的可访问资源重定向到404,和你要的「非文件、非目录请求跳404」的需求完全相反。
- 匹配范围不全:
RewriteRule ^(.*)/$仅匹配路径末尾带斜杠的请求,不带末尾斜杠的异常请求完全不会命中规则,无法覆盖所有场景。 - 替换段配置冗余:返回404状态码不需要指定跳转路径,你写的
/没有实际作用。
调整后的正确配置:
RewriteEngine On # 匹配非真实存在的文件 RewriteCond %{REQUEST_FILENAME} !-f # 同时匹配非真实存在的目录 RewriteCond %{REQUEST_FILENAME} !-d # 所有符合条件的请求直接返回404状态码 RewriteRule ^ - [R=404,L]
如果需要使用自定义的404页面,可新增ErrorDocument配置,示例如下(假设自定义页面为根目录下的404.html):
ErrorDocument 404 /404.html RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ - [R=404,L]
内容的提问来源于stack exchange,提问作者yash
相关产品推荐
相关产品推荐

