使用.htaccess实现404重定向并捕获请求路径
实现全站404重定向并捕获请求路径的.htaccess配置
没问题,这就给你一份直接可用的配置,完美匹配你的需求!下面分两种方案,你可以根据自己的情况选择:
方案一:使用URL重写(推荐,更灵活)
这种方案能精准控制传递的路径格式,还能避免误重定向存在的文件/目录:
# 启用URL重写引擎(确保服务器已开启mod_rewrite模块) RewriteEngine On # 仅当请求的文件或目录不存在时才执行重定向 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将请求路径(去掉开头斜杠)传递给error.php的e参数,临时重定向 RewriteRule ^(.*)$ /error.php?e=$1 [L,R=302]
关键说明:
RewriteEngine On:必须开启,这是重写规则生效的前提,绝大多数主机默认都已启用mod_rewrite,要是遇到问题可以联系主机商确认。- 两条
RewriteCond:核心作用是只对不存在的文件/目录触发重定向,避免把正常能访问的页面也跳转到错误页,比如你的首页index.php或者存在的图片/css文件都不会被影响。 RewriteRule ^(.*)$ /error.php?e=$1:^(.*)$会捕获用户请求的完整路径(比如xxx/yyy),$1就是捕获到的内容,最终拼接成error.php?e=xxx/yyy。[L,R=302]:L表示处理完这条规则就停止,不会再执行后续规则;R=302是临时重定向,测试阶段用这个更稳妥,等确认所有功能正常后,可以改成R=301(永久重定向)。
方案二:使用ErrorDocument(更简单,无需重写引擎)
如果你不需要处理路径开头的斜杠,这个方案更简洁,不需要开启重写模块:
# 直接将404请求指向error.php,传递原始请求路径(包含开头斜杠) ErrorDocument 404 /error.php?e=%{REQUEST_URI}
这种方式下,用户访问/xxx会跳转到/error.php?e=/xxx,参数里多了个开头的斜杠,如果你能在error.php里处理这个(比如用trim($_GET['e'], '/')去掉),这个方案完全可用。
额外提示:
- 确保你的
.htaccess文件放在网站根目录,这样才能全站生效。 - 如果
error.php不在根目录,要调整路径,比如在/assets/error.php,就把配置里的路径改成/assets/error.php。
内容的提问来源于stack exchange,提问作者Kevin Lupo
相关产品推荐
相关产品推荐

