我在检测到403
时让Joomla 3将用户重定向到成员页面时遇到问题。
经过几天的研究和尝试各种事情,我终于不得不提出这个问题。
根据我的研究,我了解Joomla从templates/system/error.php
主文件中读取。
我在error.php
中实施了以下代码,并且我也尝试通过.htaccess
强制执行此代码,但两者都无效。
$ReferTo = $_SERVER['REQUEST_URI'];
$ReferTo = base64_encode($ReferTo);
if ($this->error->getCode() == '403') {
header('Location: ' . $this->baseurl . '/members'); die();
}
目前的行为是Joomla只是将用户发送到一个非常无用的403
默认页面。
关于这个的任何想法?非常感谢您的帮助。
答案 0 :(得分:0)
在Joomla网站的主目录下创建一个包含以下内容的403.html文件:
<meta http-equiv="refresh" content="0; url=http://www.yourwebsite.com/members" />
在.htaccess文件中,添加以下代码:
ErrorDocument 403 /403.html
如果您只想对某些请求执行此操作,请重定向到.htaccess文件中的403.php文件(而不是重定向到403.html文件),检查REQUEST URI以查看它是否确实来自成员区域,然后重定向回成员页面。
答案 1 :(得分:0)
当尝试访问受保护的文章时,Joomla创建/引发403事件。因此,编辑文件System / error.php或在模板本身内均无效。同样,使用ErrorDocument的.htaccess或httpd.conf中的其他解决方案也不起作用。
我还尝试了代码this-> error-> getCode()=='403',但是没有触发。
我发现的唯一解决方案是修改文章的HTML视图,以将其重定向到显示登录名和个性化消息的文章。
要修改的文件是components / com_content / views / article / view.html.php第134至139行
Joomla 3.9.20
要替换的代码如下:
// Check the view access to the article (the model has already computed the values).
if ($ item-> params-> get ('access-view') == false && ($ item-> params-> get ('show_noauth', '0') == '0'))
{
$ app-> enqueueMessage (JText :: _ ('JERROR_ALERTNOAUTHOR'), 'error');
$ app-> setHeader ('status', 403, true);
return;
}
为此
// Check the view access to the article (the model has already computed the values).
if ($item->params->get('access-view') == false && ($item->params->get('show_noauth', '0') == '0'))
{
header('Location:https://www.yourwebpage/withLoginandCustomMessage.php');
die();
}
仅向尝试查看需要注册或使用其他ACL的文章的用户显示。
我知道我们不应该编辑文件,因为在Joomla更新中,这些更改可能会丢失,但这是我发现的唯一解决方案(模块或插件都无法解决此问题,显然这是由joomla 1.5)。