5

我们正在尝试保护我们的 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>

练习的目的是保护以下资源:

我尝试了 LocationsMatch、Locations、Files 和 Filesmatch 的各种组合,但无法正常工作。

先感谢您

4

3 回答 3

0

您可能不需要 htaccess。您可以从正确的系统事件发送 HTTP 身份验证标头http://php.net/manual/en/features.http-auth.php

于 2012-05-01T22:10:57.590 回答
0

这就是整体解决方案:

如果其他人需要知道,我创建了一个名为 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;
}

编辑:如果您发现这有时有效,有时无效,这可能是因为使用 [[passwordprotect]],modx 将缓存该片段。我在Revolution 上获得了更好的成功:[[!passwordprotect]]。我认为代码是 Evolution 上的 [!passwordprotect!]。感叹号只是表示不缓存片段。希望对某人有所帮助!

于 2012-05-03T21:19:47.990 回答
0

绝对没有理由这样做,并且使 MODX 革命 ACL 的全部目的无效。正确答案是:

  1. 建立一个可以访问资源的具有最低角色的用户组。
  2. 在资源组中创建测试资源。
  3. 将站点管理员添加到资源组。
  4. 在资源组中创建一个测试用户。
  5. 刷新站点缓存。
  6. 注销所有用户 - 包括您自己。
  7. 测试 ACL - 使用管理器和前端的站点管理员。
  8. 注销或使用完全不同的浏览器并使用测试用户进行测试。
  9. 一旦它开始工作,将受保护的文档移动到资源组。
  10. 将用户添加到您想要访问的组中。
  11. 删除片段。

如果您需要更多帮助,请获取我的书或访问我的网站。

于 2015-02-27T11:51:35.597 回答