2011-03-08 40 views
1

美好的一天大家,通過PHP驗證Apache目錄

我有一個目錄設置了一些Apache Auth的東西。這裏是目錄: http://gojalapeno.com/intranet/content/ado-jeune

使用ado-jeune:tezesyrab登錄。

下面是這的.htaccess權力它的代碼:

AuthName "Connexion au dossier:" 
AuthType Basic 
AuthUserFile "D:\Dropbox\htaccess\secret\.htpasswd" 
Require valid-user 

現在是由瀏覽器生成該目錄的登錄表單,但我想用我自己的HTML表單這一點。我該怎麼做?我已經使用捲曲和PHP的嘗試:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://gojalapeno.com/intranet/content/ado-jeune'); 
curl_setopt($ch, CURLOPT_USERPWD, 'ado-jeune:tezesyrab'); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_exec($ch); 
curl_close($ch); 

進行身份驗證罰款,但這個問題是,它不重定向到頁面(儘管CURLOPT_FOLLOWLOCATION),它只是「包括」它在當前文件。因此,我所有的相關鏈接都被打破了。

所以,我正在尋找的是用我自己的HTML表單驗證到Apache的基本認證目錄,後重定向到該目錄的方式。

謝謝!

回答

2

不幸的是,你所描述的將是難以實現的,由於路AuthBasic工作。從Apache's documentation

由於指定基本身份驗證的方式,每次從服務器請求文檔時都必須驗證用戶名和密碼。即使您正在重新加載同一頁面,並且頁面上的每個圖像(如果它們來自受保護的目錄)。

瀏覽器在處理每個後續請求自動發送用戶的憑據,用戶在進入後他們。

但在你的情況下,瀏覽器本身沒有連接到受保護的目錄,而是捲曲的。一種解決方案是使cURL處理對該受保護目錄的所有請求,實質上充當代理。

要做到這一點,你會寫請求用戶的憑據,因爲它請求頁面在受保護的目錄將他們一起的PHP腳本。所以這樣的事情:

<?php 

    // This is *very* basic - you would of course need to make sure the user 
    // isn't trying to access something in another location 
    $dest = $_GET["dest"]; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, 'http://gojalapeno.com/intranet/content/' . $dest); 

    // You would retrieve the user's credentials from an HTML form and save them in session vars 
    curl_setopt($ch, CURLOPT_USERPWD, $_SESSION["username"] . ":" . $_SESSION["password"]); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

    curl_exec($ch); 

    curl_close($ch); 

?> 

希望這有助於!

+0

我已經試過了之前,但這個問題是,我有HTML網頁我想顯示。這意味着這些頁面上的圖像,CSS和鏈接本身的所有鏈接都會使用這種技術。 –

0

也許你可以定義自己的錯誤文檔,其中包括在.htaccess形式:

ErrorDocument 401 /my_custom_password_form.html 

http://httpd.apache.org/docs/2.0/custom-error.html

+0

這僅僅是改變了「壞登錄」頁面。我需要做的是將憑據傳遞給Apache而不是瀏覽器的Auth表單。 –

+0

的嫌疑,該瀏覽器從頭讀取401錯誤代碼,其作用是編程的方式。我不認爲你可以從服務器端影響這一點。 – Wukerplank

+0

那麼,cURL至少可以做到這一點,auth部分。 –