我们试图在ModX安装中保护几个不同的资源。当前的.htaccess代码如下(不包括所有ModX的东西)
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /var/www/vhosts/mywebsite.co.uk/.htpasswd
<FilesMatch ^index.php'?q=71$>
require valid-user
</FilesMatch>
演习的目的是保护以下资源:
- http://mywebsite.co.uk/index.php?q=71
- http://mywebsite.co.uk/area/protected
和文件匹配的各种组合,但无法使其工作。
提前谢谢你
你可能不需要 htaccess。您可以从正确的系统事件发送 http://php.net/manual/en/features.http-auth.php HTTP 身份验证标头
这就是整个解决方案:
如果其他人需要知道,我创建了一个名为passwordprotect的代码片段,并放在页面顶部:[[passwordprotect]]。然后我输入了以下代码(对上述响应的改编):
<?php
if(isset($_SERVER['PHP_AUTH_USER']) && ($_SERVER['PHP_AUTH_USER']=='user') && ($_SERVER['PHP_AUTH_PW']=='password'))
{
echo 'You are successfully logged in.';
} else {
header('WWW-Authenticate: Basic realm="Protected area"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
}
编辑:如果你发现这有时确实有效,有时不起作用,这可能是因为使用[[密码保护]],modx将缓存代码片段。我在革命上取得了更好的成功:[!passwordprotect]]。我认为代码是进化上的[!passwordprotect!]。感叹号只是表示不缓存代码段。希望对某人有所帮助!
绝对没有理由这样做,并且使 MODX 革命 ACL 的全部目的无效。正确答案是:
- 建立具有可以访问资源的最低角色的用户组。
- 在资源组中创建测试资源。
- 将站点管理员添加到资源组。
- 在资源组中创建测试用户。
- 刷新网站缓存。
- 注销所有用户 - 包括您自己。 测试
- ACL - 在管理器和前端与站点管理员一起测试。
- 注销或使用完全不同的浏览器并与测试用户一起进行测试。
- 工作后,将受保护的文档移动到资源组。
- 将用户添加到要具有访问权限的组。
- 删除代码段。
如果您需要更多帮助,请获取我的书的副本或访问我的网站。