2012-07-11 85 views
1

我一直在使用Google地獄,因爲我遇到了問題,到目前爲止我沒有找到任何可行的方法。.htaccess:使用RewriteCond的域名

我所擁有的是一個Drupal多站點安裝,我正嘗試爲移動設備設置重定向。要開始,我有10個域只有一個公共字符串www。我想要的是檢查瀏覽該網站的設備是否爲移動設備(我正在使用AMF成功完成此操作),並確保訪問者尚未在移動版本m.domain.tld上。如果一切都很好,那麼我需要將用戶重定向到移動子域。

這樣做每個領域作品使用如下:

RewriteCond %{ENV:AMF_DEVICE_IS_MOBILE} ^true$ 
RewriteCond %{ENV:AMF_DEVICE_IS_TABLET} !^true$ 
RewriteCond %{HTTP_HOST} !^[m.]+mysite.com$ 
RewriteRule (.*) http://m.mysite.com/$1 [R=301,L] 

我不知道,不過,想擁有這些區塊的10(1爲每個域)我也不希望有創建另一個塊每我們創建一個新網站。

我讀過,你可以在RewriteCond模式中使用()使匹配模式中的一個var。不幸的是,我不認爲我正在做我的模式或東西,因爲當我嘗試下面它重定向到M.隨後是uri的請求。

爲了簡潔起見,我將略去AMF條件。

RewriteCond %{HTTP_HOST} !^[m.]+([^.]\.[com|net|org])$ 
RewriteRule (.*) http://m.%1/$1 [R=301,L] 

從我讀的,%1應該匹配我的模式從RewriteCond,但它不匹配任何東西。這讓我覺得我的模式是錯誤的。我嘗試將([^。]。[com | net | org])更改爲(。*),但得到相同的問題,它只是重定向到m ..

我正確地假設我的模式是錯誤的如果是的話,我應該使用什麼?我試圖做甚至可能嗎?

需要明確的是,我的域在形式:

www.domain.com

www.anotherdomain.net

somedomain.org

www.maybeanotherdomain.com

在我的例子中,我有R = 301的標誌,但是在測試中,我將其從瀏覽器中清除了很多數據,每次我測試mak我確定我正在接受新規。

在此先感謝您的幫助!

回答

0

不能反向引用一個比賽,但你可以對%的條件分成2場比賽{HTTP_HOST}變量(!):

RewriteCond %{HTTP_HOST} !^m\. 
RewriteCond %{HTTP_HOST} ([^\.]+)\.(com|net|org)$ [NC] 
RewriteRule (.*) http://m.%1.%2/$1 [R=301,L] 

您可能需要定製([^\.]+)\.位適合您的需求,這個表達式只會匹配「域名」部分「www.domain.com」

+0

太棒了!我從來沒有看到任何提及你以前不能這樣做的事情。太感謝了! :D – 2012-07-11 18:16:55

+0

@JasonGray如果有反向引用的方法,我不知道它是如何完成的,但只是像'!(表達式)'這樣的東西不起作用。 – 2012-07-11 18:22:27