我正在使用没有身份验证模块的Expression Engine 2 Freelancer editon。
我正在尝试使用密码保护具有虚拟目录的模板组 www.domain.com/template
我要做的是使用root中的htaccess强制用户在尝试导航到“模板”部分及其下的两个文件时输入用户名和密码。
Expression Engine的工作方式模板被路由到物理目录而不是物理目录。
我的问题是我如何用密码保护这个网址,我尝试使用LocationMatch但它没有用?
由于
答案 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可能对您的情况有所帮助。