2012-11-28 77 views
1

使用.htaccess我成功地重定向一組特定的子文件夾(博客開發媒體等),以子域。重定向一個子文件夾內特定的子目錄只

像這樣:

www.website.com/_subs/dev/foo被引導到dev.website.com/foo

這已經與下面的代碼片段實現:

RewriteEngine on 
RewriteBase/

RewriteCond %{HTTP_HOST} ^website.com$ 
RewriteRule ^(.*)$ http://www.website.com/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} website.com 
RewriteCond %{REQUEST_URI} ^/_subs/blog/(.*)$ 
RewriteRule .* http://blog.website.com/%1 [R=301,L] 

RewriteCond %{HTTP_HOST} website.com 
RewriteCond %{REQUEST_URI} ^/_subs/dev/(.*)$ 
RewriteRule .* http://dev.website.com/%1 [R=301,L] 

RewriteCond %{HTTP_HOST} website.com 
RewriteCond %{REQUEST_URI} ^/_subs/media/(.*)$ 
RewriteRule .* http://media.website.com/%1 [R=301,L] 

的問題是:

如果不向我的某個特定子文件夾發出請求,如何防止訪問/_subs文件夾?

我想任何請求被以www.website.com/_subs/foo作出簡單地重定向到www.website.com

我一直在使用301重定向以及其他各種嘗試無果:(

任何幫助將嘗試不勝感激。

乾杯

回答

2

你的規則比他們的要複雜得多我認爲這會讓解決方案更難以看清。

這就是我想出了:

RewriteEngine on 
RewriteBase/

RewriteCond %{HTTP_HOST} ^(www.)?website.com$ 
RewriteRule ^_sub/(blog|dev|media)/?(.*)$ http://$1.website.com/$2 [R=301,L] 

RewriteCond %{HTTP_HOST} ^(www.)?website.com$ 
RewriteRule ^_sub(/.*)$ - [F] 

RewriteCond %{HTTP_HOST} ^website.com$ 
RewriteRule ^(.*)$ http://www.website.com/$1 [R=301] 

RewriteCond•限制前兩個規則,使他們只能在website.comwww.website.com運行。據推測,你可能在將來有一個像http://blog.website.com/_sub/this-rocks這樣的網址,你不想重定向。

在第一次重寫中包含這兩個域意味着您將少一個301重定向,這會使得請求以更快的速度重定向到http://website.com/_sub/blog直接重定向到http://blog.website.com。 L確保沒有任何符合此規則的內容會被標記爲禁止。

第二次重寫將返回403,返回值爲/_sub,與第一條規則不匹配。 /位於組內,因此它將匹配/_sub,/_sub//_sub/.*。如果/在外面,您將無法在沒有單獨的規則的情況下403 /_sub

最後一次重寫與您的第一條規則相同 - 不需要放置L,因爲它已經是最後一條要處理的規則。

相關問題