我基本上想做的是将任何404请求重定向到/404/
,但我希望它将页面"拉"到index.php?error=404
,同时将URL保留为/404/
,然后我可以使用PHP(使用$_SERVER['HTTP_referer']`)获得referer。
我认为ReWrite规则应该先于ErrorDocuments,所以我的.htaccess文件如下所示:
RewriteRule ^404/$ /index.php?error=404
ErrorDocument 404 /404/
我知道我可能在上面做了一些根本错误的事情,因为404页面/$_SERVER没有得到referer URL(可能是因为ErrorDocument)。
index.php页面获取通过它路由的所有内容(我收集了一些非常标准的内容),并在找不到页面/文件时发送一个头重定向到/404/if/。虽然如果有人在浏览器中错误地输入了URL,我希望得到原始请求,但由于页面无论如何都在重定向,那应该仍然是PHP中的referer吗?
我建议您直接使用error.php
文件进行不同的操作:
ErrorDocument 404 error.php
然后,您可以使用该文件作为代理,将所有需要的信息注入index.php
。如果您需要查找apache状态代码(以及其他有用信息),请查看$_SERVER
超全局数组。
这样做可以提供更好的控制级别,并且在需要将应用程序从一台服务器迁移到另一台服务器时,可以更容易地处理服务器差异。