2012-12-27 127 views
0

我有點卡住了我的重定向規則。小例子比長篇演說更好,在這裏不用大丑:在重寫規則中重用子域

IndexIgnore * 
ErrorDocument 404 http://www.example.com 
RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^([^\.]+)\.example\.com$ http://example.com/private/$1/public/si.php [L] 

我的目標是讓子域([^\.]+)和重定向使用它,而不是$1。 例如,test.example.com應該重定向到http://example.com/private/test/public/si.php

謝謝你的幫助。

問候, S.

最終工作htaccess的:

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{REQUEST_URI} !^/private/ 
RewriteCond %{HTTP_HOST} ([^\.]+).example.com [NC] 
RewriteRule^/private/%1/public/$1 [R=301,L] 

重定向anysub.example.com/anypageanysub.example.com/private/anysub/public/anypage

回答

2

用於匹配agains的字符串t一個RewriteRule的模式將從來沒有包含主機名,只有URI和沒有任何查詢字符串。如果您要忽略實際的URI,那麼您不需要RewriteRule中的模式來匹配任何內容。你需要使用一個符號反向引用以前的分組在RewriteCond

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$ [NC] 
RewriteRule^http://example.com/private/%1/public/si.php [L] 

您可以在規則的方括號加R=301標誌,使重定向永久。

+0

如果過濾的方式是使用RewriteCond,我沒有得到什麼是使用rewriterule模式。你能解釋給我嗎?此外,它正在工作,但我希望瀏覽器顯示的網址是短的,即test.example.com;它翻譯成它顯示完整的一個。 – Sebas

+0

@Sebas這個'^'字符的意思是「URI的開始」,它的確和'。*'沒有區別。基本上它匹配一切。如果您不想重定向瀏覽器(重定向**總是**更改瀏覽器的URL地址欄中的內容),則從規則的目標中移除「http:// example.com」。 –

+0

完美,我不得不添加一個過濾器,以避免遞歸重定向和voilá!謝謝你的幫助 – Sebas

1

嘗試改寫條件反向引用:

RewriteCond %{HTTP_HOST} ([^\.]+).example.com [NC] 
RewriteRule ^.*$ http://example.com/private/%1/public/si.php [L] 
+0

謝謝,這是工作。喬恩的答案稍微詳細一點,這就是爲什麼我會接受他的職位。再次感謝並歡迎來到StackOverflow – Sebas