2013-08-01 73 views
1

我一直在尋找這個,但我真的是新手與.htacces(我覺得它是一個地獄),我無法解決這個問題。.htaccess使子目錄出現在URL

我有我的服務器中的文件夾,將默認域URL重定向到文件夾「web」。我有另一個文件夾,比如,摺疊,在裏面,我有另一個文件夾: mobile

我想的是,如果有人類型 www.adomain.com它去根/ subfold,而不顯示 subfold。我已經做到了這種方式:

RewriteEngine on 
Options +FollowSymLinks 
RewriteBase/

RewriteCond %{HTTP_HOST} ^www\.adomain\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/subfold/ [NC] 
RewriteRule (.*)$ /subfold/$1 [L] 

RewriteCond %{HTTP_HOST} www\.maindomain\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/web/ [NC] 
RewriteRule (.*)$ /web/$1 [L] 

然而,當我去 www.adomain.com/mobile它顯示在URL www.adomain.com/subfold/mobile/

我的目標是,如果我去移動子文件夾,在URL應該顯示 www.adomain.com/mobile

顯然,我想不會有寫重定向每次我添加一個子文件夾,它是可能的。

我應該怎麼做?

感謝您的時間和幫助!

回答

2

由於您訪問的目錄沒有結尾的斜槓,您將會收到重定向。默認情況下,默認情況下,mod_dir模塊將重定向瀏覽器,並在有人嘗試訪問不帶尾部斜線的目錄時添加尾部斜線。這是因爲索引目錄存在信息泄露問題。您可以關閉此功能:

DirectorySlash Off 

以及即使存在index.html文件也會列出目錄內容的風險。或者添加一組規則以確保存在斜線:

RewriteEngine on 
Options +FollowSymLinks 
RewriteBase/

# redirect for trailing slash: 
RewriteCond %{HTTP_HOST} ^www\.adomain\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/subfold/ [NC] 
RewriteCond %{DOCUMENT_ROOT}/subfold%{REQUEST_URI} -d 
RewriteRule (.*[^/])$ /$1/ [L,R=301] 

RewriteCond %{HTTP_HOST} ^www\.adomain\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/subfold/ [NC] 
RewriteRule (.*)$ /subfold/$1 [L] 

# redirect for trailing slash 
RewriteCond %{HTTP_HOST} www\.maindomain\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/web/ [NC] 
RewriteCond %{DOCUMENT_ROOT}/web%{REQUEST_URI} -d 
RewriteRule (.*[^/])$ /$1/ [L,R=301] 

RewriteCond %{HTTP_HOST} www\.maindomain\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/web/ [NC] 
RewriteRule (.*)$ /web/$1 [L] 
+0

非常感謝您的回答!正如你所說的那樣,這是削減整個東西的大刀闊斧。 – Unapedra