如何在.htaccess的ErrorDocument重定向中携带错误URL参数?
解决404错误页面传递原始请求URL的问题
问题原因
你之前使用带完整域名的ErrorDocument配置会触发外部重定向,Apache在这个过程中不会保留原始请求的URL路径,所以无法直接通过$1这类变量传递参数。
正确配置方案
用RewriteRule替代单纯的ErrorDocument,直接捕获不存在的请求并传递参数:
RewriteEngine On # 匹配不存在的文件和目录 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 重定向到error.php,将原始路径作为url参数传递 RewriteRule ^(.*)$ /error.php?url=$1 [L,R=302]
配置说明
RewriteCond %{REQUEST_FILENAME} !-f:判断请求的不是真实存在的文件RewriteCond %{REQUEST_FILENAME} !-d:判断请求的不是真实存在的目录RewriteRule ^(.*)$ /error.php?url=$1 [L,R=302]:把匹配到的所有路径($1)作为url参数,临时重定向到error.php- 如果需要永久重定向,把
R=302改成R=301 - 如果不想改变URL地址(内部转发),去掉
R=302只保留[L],此时error.php仍可通过$_GET['url']获取路径,但浏览器地址栏不会显示参数
- 如果需要永久重定向,把
替代方案(内部转发保留参数)
如果不需要在浏览器地址栏显示参数,只想在error.php中获取原始请求路径,也可以用以下配置:
ErrorDocument 404 /error.php
然后在error.php中通过$_SERVER['REQUEST_URI']直接获取原始请求的URL路径,无需额外传递参数。
内容的提问来源于stack exchange,提问作者Miger
相关产品推荐
相关产品推荐

