2011-05-23 124 views
0

我正在使用没有认证模块的Expression Engine 2 Freelancer editon。尝试使用htaccess密码保护URL

我想密码保护,有一个虚拟目录www.domain.com/template模板组

我所要做的是使用htaccess的根迫使人们进入用户名和密码,当他们尝试导航到“模板”部分及其下的两个文件时。

表达式引擎处理模板的方式被路由到物理目录而不是物理目录。

我的问题是我如何密码保护这个网址,我试过使用LocationMatch,但它没有工作?

感谢

+0

最好在ServerFault上解答。 – 2011-05-23 12:27:10

回答

0

你不能有效地保护mod_rewritten URL(如果有可能的话)。攻击者只需访问被保护的URL被重写到的物理位置 - 在这种情况下,您将离开不受保护的位置。

我想,你仍然必须在PHP方面做到这一点。如果您的PHP作为Apache模块运行,应该可以检查请求的资源是否属于受保护的目录(通过QUERY_STRING或其他指示符),然后发送请求验证的正确标头,如在PHP手册中描述的here

0

从URL中删除index.php的哪种方法正在使用?

如果您使用的是“File and Directory Check”的方法,你可以修改已有Apache mod_rewrite规则,排除某个目录,同时还允许所有其他请求直通index.php运行。

例如,使用基地“文件和目录检查”重写规则:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php/$1 [L] 
</IfModule> 

使用这种方法,阿帕奇检查,看是否存在文件或目录 - 如果它的文件送达浏览器;如果它不存在,则通过index.php发送并解析为ExpressionEngine URI

要排除目录,加入你的.htaccess基本身份验证password-protected directory修改重写规则:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_URI} !^/(secret-directory|secret-directory/.*)$ 
    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php/$1 [L] 
</IfModule> 

我不完全知道什么所有的限制都与自由职业者许可,但我answered a similar question about password-protecting pages in ExpressionEngine这可能会证明对您的情况有帮助。