2012-11-14 69 views
1

我試圖將所有文件夾(使用通配符)重定向到他們的子域。例如:如何寫一個htaccess文件到通配符文件夾到子域

www.mywebsite.com/folder1到folder1.mywebsite.com/
www.mywebsite.com/folder2到folder2.mywebsite.com/
www.mywebsite.com/folder3到folder3 .mywebsite.com/

現在沒有爲他們每個人寫規則,有沒有辦法將他們全部重定向到他們各自的子域?

我想:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com$ 
RewriteCond %{HTTP_HOST} ^(\w+)\.mywebsite\.com$ 
RewriteRule ^(.*)$ /%1/$1 [QSA] 

但它給了我一個內部錯誤500

+1

http://stackoverflow.com/questions/6725973/rewrite-folder-to-subdomain-with-htaccess 這是你在找什麼? – Paronity

+0

是的,但這個例子並不適合我。我嘗試了 RewriteEngine On RewriteCond%{HTTP_HOST}!^ www \ .mywebsite \ .com $ RewriteCond%{HTTP_HOST} ^(\ w +)\。mywebsite \ .com $ RewriteRule ^(。*)$ /%1/$ 1 [QSA] 但它給了我一個內部錯誤500 – user1822683

回答

2

你需要保持規則的循環,使用條件,首先檢查是否/%1/$1確實存在,該URI尚未開始%1

所以:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com$ 
RewriteCond %{HTTP_HOST} ^(\w+)\.mywebsite\.com$ 
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -d 
RewriteRule ^(.*)$ /%1/$1 [QSA] 

或者:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com$ 
RewriteCond %{HTTP_HOST} ^(\w+)\.mywebsite\.com$ 
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1 
RewriteRule ^(.*)$ /%1/$1 [QSA] 

!^/([^/]+)/([^:]*):\1表達組URI中的第一文件夾,並用\1反向引用它。如果這些相同,則URI中的第一個文件夾是%1,該文件被反向引用到前一匹配(\w+)

+0

好點。我相信如果文件存儲在正確的位置,我發佈的解決方案就可以工作,但很可能並非如此。該解決方案更加優雅徹底。 – Paronity

相關問題