2014-02-09 28 views
1

我正在處理位於mysite.com/dir/.htaccess中的.htaccess文件,如果可能,將mysite.com/dir/page重定向到mysite.com/dir/page.php如果不可能的話,重定向到mysite.com/dir/。所以任何「錯誤」的請求都會被重定向到主頁面。我使用的代碼是:mod_rewrite:動態重定向和目錄阻止

RewriteEngine on 

# determine DIR_BASE dynamically 
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$ 
RewriteRule ^(.*)$ - [E=DIR_BASE:%1] 

# see if .php is found 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f 
RewriteRule ^(.*)$ $1.php 

# if not found redirect to %{ENV:DIR_BASE} 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule^%{ENV:DIR_BASE} [R] 

這一切都很好。 (順便說一句:我想確定文件的基本目錄,因爲我可能想稍後更改目錄名稱,但不更改文件)。我現在想要的是阻止用戶的某些目錄,因爲它們包含不應該可訪問的php庫。我怎麼能請阻止目錄mysite.com/dir/lib/*和mysite.com/dir/lib2/*並將它們重新定向到mysite.com/dir/,就像我以前一樣?我也想用代碼不喜歡

RewriteRule ^lib/(.)* %{ENV:DIR_BASE} 

會重定向mysite.com/dir/lib/../page主網頁,而不是mysite.com/dir/page它應該屬於。我非常想用%{REQUEST_FILENAME}和%{REQUEST_URI},但我只是一個初學者,當談到mod_rewrite。你知道一個解決方案嗎?

回答

1

這應該工作:

RewriteEngine on 

# determine DIR_BASE dynamically 
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$ 
RewriteRule ^(.*)$ - [E=DIR_BASE:%1] 

RewriteRule ^lib2?(/|$) %{ENV:DIR_BASE} [L,NC,R] 

# see if .php is found 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f [NC] 
RewriteRule ^(.*)$ $1.php [L] 

# if not found redirect to %{ENV:DIR_BASE} 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule^%{ENV:DIR_BASE} [L,R] 
+1

是的,它確實工作得很好,非常感謝你。這也是你第二次爲我回答問題嗎? – Sirac

+0

是的,我記得。很高興這次再次運作。 – anubhava