2011-11-25 82 views
1

我需要密码保护特定的URL,例如任何人都可以访问index.php,但只要他们添加参数或“GET”变量,我必须要求有效用户。apache密码保护特定的URL

的index.php - >甜

的index.php分组= 1 - >需要有效的用户

回答

2

有趣题。

这里有一个解决方案:

<Location /fakeindex.php> 
    Order Deny,Allow 
    Deny from All 
    Allow from env=REDIRECT_STATUS 
    AuthType Basic 
    AuthUserFile /pathto/htpasswd/file/passwords.secret 
    AuthName This is an example auth 
    Require valid-user 
</Location> 
<Directory /path/to/doc/root> 
    Order allow,deny 
    allow from all 
    RewriteEngine On 
    RewriteCond %{QUERY_STRING} . 
    RewriteCond %{REQUEST_URI} index.php 
    RewriteRule .* fakeindex.php [L,QSA] 
</Directory> 

这一部分:

Order Deny,Allow 
    Deny from All 
    Allow from env=REDIRECT_STATUS 

,以防止有一个直接访问/fakeindex.php(但其实谁愿意执行的直接访问一个保护区)。这是唯一的。

关键的一点是,论文条件规则检测一个非空的查询字符串,并index.php的一个请求:

RewriteCond %{QUERY_STRING} . 
    RewriteCond %{REQUEST_URI} index.php 

,如果他们匹配规则:

RewriteRule .* fakeindex.php [L,QSA] 

重定向在内部将请求保存到/fakeindex.php,并使用QSA保留查询字符串。之后,位置被应用,并且在位置上进行鉴定。

+0

哇!非常感谢你!一个q,但 - 这不能在.htaccess中使用,因为<位置不允许在这种情况下...?此外,我认为我的实际情况是不可能的 - 我需要有相同的文件,当传递任何世界可读的,但是当它通过一个特定的获取变种,它需要一个有效的用户...这是为了减轻整个副本一个不断变化的文件与一个小的PHP变化哈哈...谢谢你这么多无论如何! – lol

-2

你可以使用isset()方法上得到变量如:

if (isset($_GET['prev'])) { 
//load password input form 
}