如何使用htaccess和htpasswd在ModX网站中为资源设置密码保护?

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的组合,但无法使其正常工作。谢谢您的帮助。

1
我会说:开始阅读这些指令的手册,至少可以让你了解为什么你迄今为止尝试的东西无法工作:http://httpd.apache.org/docs/current/mod/core.html#filesmatch - hakre
1
你为什么要使用.htaccess而不是modx内置的资源/安全管理? - Sean Kimball
1
@user1346416:提示:文件名在磁盘上(而不是URL内),因此可能是index.php,这就是所有请求。你可能更多地寻找位置:http://httpd.apache.org/docs/current/mod/core.html#location - 请注意,此指令在.htaccess文件中不可用。 - hakre
@hakre 感谢你的指引,虽然我已经尝试了Location和LocationMatch,但是没有成功 - 我会继续努力。 - user1346416
你可以将文件/目录放在Web根目录之外,并使用MODX控制对资源的访问。尽管您似乎想通过URL示例控制对MODX资源的访问,但这些资源不存在于文件中,而只存在于数据库[和缓存]中。根据kakre的帖子,看起来您确实想要使用位置,但无法在.htaccess中实现...您需要向Apache配置添加指令[大多数控制面板都具备此功能]。我浏览了一下MODX论坛,这不是一个新问题,但遗憾的是还没有解决方案。 - Sean Kimball
显示剩余2条评论
3个回答

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!]。感叹号只是表示不要缓存片段。希望能帮助到某些人!


如果您发现有时候这个功能可以正常工作,而有时候又不能正常工作,那么很可能是因为在使用[[passwordprotect]]时,MODX会缓存该片段。 - user1346416
此外,缓存的片段可能具有之前用户的身份验证信息而不是新用户的。请阅读以下内容以获取正确的实现方式。 - W. Shawn Wilkerson

0

完全没有理由这样做,这将使 MODX Revolution ACLs 的整个目的失去意义。正确的做法是:

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

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接