2014-04-28 58 views
0

我已经设置错误页面.htaccess它工作正常。显示404为受保护的页面(没有地址更改)

ErrorDocument 404 somedir/404.php 

现在我试图弄清楚当没有权限的用户试图访问某些页面时如何显示该页面。

好吧,到目前为止我试过了什么?

逻辑表示,如果我将用户重定向到某个不存在的页面,将触发404服务器响应,或者我可以将他重定向到404.php。正确,那是有效的。

header ("location: /404.php"); 
exit; 

从一个这样的URL变化,用户的要求,以(在这个例子中)http://www.mydomain.com/404/php。我不想改变它!我希望用户看到他要求的地址,不管该页是受保护的还是根本不存在。

当然,我可以解决并加载404.php,但由于其模板引擎的工作原理,令我很头疼。关于tplEngine如何控制模板的完整理念,如果需要的话,我将把它作为“计划B”。

有没有简单的方法来做到这一点,没有复杂的工作?

回答

1

您可以更改文档标题,显示404错误。

header('HTTP/1.0 404 Not Found'); 

之后,您可以用file_get_contents()加载404.php页面。该URL将保持不变。

+0

等一下,你刚刚给了我一个主意。给我一些时间来尝试。 – Wh1T3h4Ck5

+0

是的,那是有效的。我早些时候尝试过,但不知何故,我使用相同的标题犯了错字。它现在有效。太感谢了。 – Wh1T3h4Ck5

+0

可能是我误解了这个问题,但这只会返回404状态,但不会显示自定义404页面。 – anubhava

1

而不是header功能可以包括:404.php,并返回自定义状态:

include ("404.php"); 
exit; 

而且从404.php有这样的:

http_response_code(404); 
+0

是的,这是我的“计划B”,但看。 404.php不只是一个简单的脚本。它加载了大量关于用户,所选语言(界面),皮肤等的信息。几十个非常相同的东西(脚本)也被该页面加载,最终必须显示404.php。有很多由'include_once'和'require_once'调用的脚本,我只是不想完成所有脚本并进行更改。这是非常复杂的结构(+多服务器)。这就是为什么我说它会是“B计划”。无论如何,谢谢你的回应。 – Wh1T3h4Ck5

+0

如果有些人使用简单的错误页面,必须将其作为工作示例。非常感谢。 – Wh1T3h4Ck5