2012-05-01 144 views
5

我们正在尝试保护ModX安装中的几个不同资源。目前的.htaccess代码如下(不包括所有的东西镆铘)如何使用htaccess和htpasswd密码保护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

+0

阅读每一个字,并尝试每一个我可以探索的选项。这需要的是某人可能在实现这个问题方面有一定的经验,这一点很常见。 – user1346416

+1

为什么你使用.htaccess而不是modx内置的资源/安全管理? –

回答

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会缓存片段。我在革命中获得了更好的成功:[[!passwordprotect]]。我认为在Evolution上的代码是[!passwordprotect!]。感叹号只是表示不缓存片段。希望能帮助别人!

+0

如果你发现这有时会起作用,有时不起作用,这可能是因为使用[[passwordprotect]],modx会缓存片段。 – user1346416

+0

另外,缓存的代码片段可能有PREVIOUS用户认证,而不是新的。请阅读下面的正确实施。 –

0

绝对没有理由这样做,并且取消了MODX Revolution ACL的整个目的。正确的答案是:

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

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