2011-09-07 27 views
8

一直在尋找2天,並不能完全得到正確的解決方案,由於我對這個項目,所以希望有人能幫助缺乏的mod_rewrite和時間限制的理解。的.htaccess中的子目錄「覆蓋」父htaccess的

目的

要改寫到根index.php的所有請求,如果客戶端沒有正確的cookie。 如果客戶端有正確的cookie,可以讓他們按照自己的意願進行瀏覽。

問題

在我的子目錄中的htaccess正在precendence在我的根htaccess的,所以請求,如www.mydomain.com/subdir/index.php arn't被重定向。

我的根的.htaccess

Options FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_COOKIE} !^.*pass.*$ 
RewriteCond %{REQUEST_URI} !^/index.php$ 
RewriteRule ^(.*)$ http://www.mydomain.com/index.php?url=$0 [NC] 

我子目錄的htaccess

RewriteEngine On 
RewriteBase/
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

理想我想創建一個密碼保護區域,所以其他信息所有的請求都被路由到index.php在哪裏可以輸入密碼,並在驗證後創建cookie,允許自由瀏覽內容和子目錄。所以如果有更好的方法來完成這個,那麼請讓我知道,而且我沒有去.htpasswd,因爲我需要自定義登錄,錯誤和啓動頁面。

此外,子目錄的.htaccess是ExpressionEngine URL處理程序。

謝謝。

+0

不管你如何解決這個問題,檢查一個cookie的存在不是很好安全。僞造一個是微不足道的,因爲你沒有驗證cookie中的數據,只是檢查它的存在),所以你的「安全」系統是微不足道的。 –

+0

@Abe只是一個建議,但你有沒有想過實現HTTP認證,如果你唯一的希望允許訪問directorys:http://uk.php.net/manual/en/features.http-auth.php –

回答

18

要允許從父.htaccess(父文件夾中的htaccess)執行重寫規則,您需要明確地允許它(Apache會將當前.htaccess中的重寫規則視爲唯一需要執行的規則,只要重寫的URL保持在同一個子文件夾中)。

您需要將此行添加到您的.htaccess中的子文件夾:

RewriteOptions inherit 

Apache的手冊:http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions