1

您好为 joomla 创建了一个 error.php 以将 404 错误等重定向到 joomla 文章。下面的代码适用于 404 错误,但 403 会返回空白页。我可以直接在我的脚本之外导航到该页面,因此它必须是我的代码或它在其环境中的交互方式。

谢谢斯蒂芬

defined( '_JEXEC' ) or die( 'Restricted access' );
if ($this->error->code == 404)
{
Header( "HTTP/1.1 404 Not found" );
header("Location: http://www.queensberry.com/misc/filenotfound/");
} else if ($this->error->code == 403) {
Header( "HTTP/1.1 403 Restricted Content" );
Header( "Location: http://www.queensberry.com/restrictedcontent/" ); 
} else {
echo "hello world error code = " . $this->error->code;
}
?>
4

4 回答 4

6

而不是使用Header("Loaction:...")你应该使用一个include()或一些这样的渲染“受限内容”页面然后退出。浏览器很可能在收到 403 后没有跟随 Location 标头。

于 2009-08-15T01:28:30.390 回答
5

我感谢大家的帮助,但答案让我朝着与我所希望的方向不同的方向前进。我想继续使用 Joomla 的 error.php 文件作为 Joomla 错误的目的地,但我不想将页面格式化为看起来像是我想重定向到 Joomla 内容的网站的一部分。

最后我发现我需要的是一个出口;在我的脚本中。所以这里是error.php,因为它现在正在工作。

defined( '_JEXEC' ) or die( 'Restricted access' );
if ($this->error->code == 404)
{
Header( "HTTP/1.1 404 Not found" );
header("Location: http://www.queensberry.com/misc/filenotfound/");
exit;
} else if ($this->error->code == 403) {
Header( "HTTP/1.1 403 Restricted Content" );
Header( "Location: http://www.queensberry.com/restrictedcontent/" ); 
exit;
} else {
echo "hello world error code = " . $this->error->code;
}
?>
于 2009-08-16T00:01:27.973 回答
1

Header("Location:") 导致标准重定向到新页面。只有在 PHP 呈现的页面上才会发送 403 错误。因此,您实际上是在尝试说(使用您发布的代码)“当前页面导致 403 错误”,但随后您完全重定向到一个完全不同的页面。将 403 标头添加到http://www.queensberry.com/restrictedcontent/,你应该很好。您还需要对 404 标头执行相同操作。

于 2009-08-15T01:49:47.753 回答
1

如果 (HTTP/1.1 403) 则Web 浏览器(Firefox, IE, Chrome, ...)将忽略任何内容

位置:(bla bla bla)是。

不相信 ?

假设 :: 您知道如何从您的 Joomla 站点生成错误代码 403。(我的意思是产生错误代码 403 的 joomla_site/bla-bla-bla ::)

让我们询问Web Server是否提供(基于您的 error.php 文件)如下:

... HTTP/1.1 403 受限内容位置:http ://www.queensberry.com/restrictedcontent/ ...

根据您的 error.php 文件,这些是正确的(我的意思是您的 error.php 文件可以按您的意愿工作

-- 使用 telnet 80 检查

咱们试试吧

c:\telnet your_host:80

获取 bla-bla-bla HTTP/1.1

主持人:joomla_site

-- 希望这能满足你的好奇心 :-)

我再重复一遍:

如果 (HTTP/1.1 403) 则Web 浏览器(Firefox, IE, Chrome, ...)将忽略任何内容

位置:(bla bla bla)是。

于 2009-08-22T03:54:56.903 回答