尝试使用htaccess密码保护URL

时间:2011-05-23 12:24:13

标签: apache .htaccess expressionengine

我正在使用没有身份验证模块的Expression Engine 2 Freelancer editon。

我正在尝试使用密码保护具有虚拟目录的模板组 www.domain.com/template

我要做的是使用root中的htaccess强制用户在尝试导航到“模板”部分及其下的两个文件时输入用户名和密码。

Expression Engine的工作方式模板被路由到物理目录而不是物理目录。

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

由于

2 个答案:

答案 0 :(得分:0)

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

我认为你仍然需要在PHP方面这样做。如果您的PHP作为Apache模块运行,则应该可以检查所请求的资源是否属于受保护目录(通过QUERY_STRING或其他指示符),然后发送请求身份验证的正确标头{ PHP手册中的{3}}。

答案 1 :(得分:0)

您使用哪种从网址中删除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>

使用此方法,Apache会检查文件或目录是否存在 - 如果存在,则将文件提供给浏览器;如果它不存在则通过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>

我并不完全了解 Freelancer License 的所有限制,但我answered a similar question about password-protecting pages in ExpressionEngine可能对您的情况有所帮助。