2013-08-20 153 views
1

我對mod_rewrite規則沒什麼問題。該規則似乎正在工作,但阻止對目錄及其文件的訪問。Mod_Rewrite隱藏目錄

這裏是我想要完成

www.example.com/about-us/ *** Parent rule 

www.example.com/about-us/our-mission.html *** child rule 

雖然,我的規則是實現這一點,但阻止訪問物理文件和目錄服務器上。

在同一臺服務器,我有管理界面,用戶需要訪問作出改變......

www.example.com/manage/dash.php 

當我嘗試訪問目錄/管理或它的是文件,我重定向到404頁這是由子重寫規則生成的重定向。

當我註釋掉孩子重寫規則時,我能夠訪問這些提到但帶有子規則的訪問被阻止。

請參閱下面的我的重寫代碼,並幫助我確定問題。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 


#This rule will rewrite url to the main page www.example.com/about-us 
RewriteRule ^([^/]+)/?$ index.php?get_parent=$1 [L] 

#This rule will rewrite url to the secondary url www.example.com/abou-us/our-mission.html 
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?get_parent=$1&get_child=$2 [L] 

謝謝。

回答

0

您還需要從第二個RewriteRule中排除文件/目錄。

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
#This rule will rewrite url to the main page www.example.com/about-us 
RewriteRule ^([^/]+)/?$ index.php?get_parent=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
#This rule will rewrite url to the secondary url www.example.com/abou-us/our-mission.html 
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?get_parent=$1&get_child=$2 [L] 
+1

我明白了,所以這確實解決了這個問題,一旦規則結束,第一組排除便會被排除。沒有想過這樣。 – S01010011

0

這看起來相當公平,因爲您的網址www.example.com/manage/dash.php與正則表達式匹配。使用[L]在第一個規則的結束,2個條件不再被用於第二規則

您應該添加非匹配模式太(見documentation

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

在這裏,我們應該該文件/manage/dash.php確實存在。

希望它會幫助你。