2011-12-09 19 views
0

我有一個名爲users的目錄,其中包含每個用戶的子目錄。例如。我的目錄結構可能如下所示:如何使用htaccess重寫規則從現有文件重定向?

 
users/ 
    .htaccess 
    UserAccess.php 
    foo/ 
     baz.txt 
    bar/ 
     passwd.txt 

我想阻止用戶訪問其他用戶文件。因此,我寫了一個php腳本來檢查路徑並打印文件內容。問題在於腳本沒有運行,而是Apache正試圖直接訪問這些文件。

我的用戶/目錄下的.htaccess是:然後

 

RewriteEngine on 
RewriteRule ^users/ UserAccess.php 

用戶會嘗試訪問http://mywebsite.com/users/username/file。例如。 http://mywebsite.com/users/foo/baz.txt

關鍵是http://mywebsite.com/users/username/是一個REAL目錄。

我該如何解決這個問題來完成我想要的?

編輯:

 

RewriteEngine on 
RewriteRule . UserAccess.php 

不工作要麼。

+0

好吧,你可以重命名文件UserAccess.php爲index.php – nwaltham

+0

這是如何解決這個問題? (當我嘗試它時沒有工作) – chacham15

+0

如果你把它放在/ users /那麼它將運行而不是正在生成的目錄列表(假設你的web服務器是這樣設置的,通常是這樣)。順便說一句,你有哪裏你的UserAccess.php腳本? – nwaltham

回答

0

答案是子文件夾(示例中的foo)的權限爲700.在重寫規則解析之前,這導致了403響應。我將權限更改爲701,一切正常。

+0

任何人都不可能知道這是問題。 :( – ghoti

+0

我不是指責任何人,這只是一個問題,花了我很長時間才發現,因此我在這裏發佈了答案,以便其他人可能不必花太長時間尋找答案。(I + 1' d所有幫助過的人) – chacham15

1

要防止直接訪問,您可以對除UserAccess.php以外的所有文件使用Deny from all

+0

我目前正在使用文件/目錄權限來完成此操作,但問題在於UserAccess.php文件沒有運行 – chacham15

1

我猜你需要使用mod_rewrite的選項 看看here

2

如果您的網址是像http://example.com/users/...補充說:

RewriteCond %{REQUEST_FILENAME} -f 

應該使其工作。

我樹立了一個榜樣在我的電腦上,使用下列.htaccess

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^testdir readHTACCESS.php 

和它的作品就好了... ...

LINK

+0

沒有運氣:(也沒有工作 – chacham15

+0

@ chacham15檢查編輯 – Teneff

+0

我不知道爲什麼,但它 – chacham15

1

我假設的mod_rewrite是活的,在你的服務器上運行,我們正在處理的是如何使用它。 :-)

我建議你指定一個到UserAccess.php的顯式路徑。你知道「工作目錄」是用於你的重寫規則嗎?

RewriteRule ^/users/ /users/UserAccess.php 

我測試過這個,它適用於我。如果它不適合你,那麼可能有一個配置問題不僅僅是重寫規則。如果是這種情況,那麼知道您在access.log和error.log中看到的內容會非常有幫助。

您也可以或許簡化發生了什麼事情在PHP飼以文件名作爲一個變量:

RewriteRule ^/users/(.+\.txt) /users/UserAccess.php?what=$1 

這樣的話,你可以跳過解析$ _ SERVER [「REQUEST_URI」],只是測試是否存在該文件在用readfile()或者equiv發送出去之前。

+0

access_log:[09/2011年12月:10:00:44 -0600]「GET /users/foo/baz.txt HTTP/1.1」403 639「 - 」「Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit/535.2(KHTML,像Gecko )Chrome/15.0.874.121 Safari/535.2「error_log:empty – chacham15

+0

因此,我認爲指定UserAccess.php的路徑沒有幫助嗎?您能否確認mod_rewrite實際上正在加載,並且您的.htaccess文件正在被正確評估? – ghoti

+0

嘗試訪問'/ users/foo/baz.txt',其中'/ users/foo /'是一個真實的目錄 – chacham15