2011-11-25 79 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 
}