FallbackResource对.php后缀URL无效,如何使其生效?
解决FallbackResource对.php结尾不存在URL不生效的问题
问题原因
Apache 对以 .php 结尾的请求会优先交由 PHP 处理模块(如 mod_php、php-fpm)处理,即使对应的物理文件不存在,PHP 模块也会直接返回 404 错误,不会触发 FallbackResource 规则,这就是你的配置对非 .php URL 生效但对 .php URL 失效的核心原因。
解决方案
通过添加 Rewrite 规则拦截 .php 结尾的请求,先判断文件是否真实存在,若不存在则转发到 errordoc.php,同时保留原有规则处理其他类型请求:
RewriteEngine On # 拦截所有.php结尾请求,仅当文件不存在时转发到errordoc.php RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+\.php)$ /errordoc.php [L] # 处理其他所有不存在的URL请求 FallbackResource /errordoc.php
规则说明
RewriteCond %{REQUEST_FILENAME} !-f:校验当前请求对应的物理文件是否不存在RewriteRule ^(.+\.php)$ /errordoc.php [L]:匹配所有.php结尾的URL,转发到指定文件,[L]标记表示这是最后一条执行规则,不再处理后续规则- 原有
FallbackResource继续处理非.php结尾的不存在URL请求
替代方案(统一处理所有请求)
如果希望用单一规则覆盖所有不存在的请求(包括 .php),可以完全用 Rewrite 规则替代 FallbackResource:
RewriteEngine On # 检查请求的文件或目录是否均不存在 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ /errordoc.php [L]
该规则会对所有不存在的文件/目录请求(无论后缀)统一转发到 errordoc.php,达到预期效果。
内容的提问来源于stack exchange,提问作者Mehul Kumar
相关产品推荐
相关产品推荐

