2012-08-01 22 views
3

我有一個網站:www.explainmortgage.com.htaccess中的正則表達式 - 如何在301_Uri中找到HTTP_HOST?

在那個網站,我有http://www.explainmortgage.comhttp://www.explainmortgage.com/mortgage(其中包括許多其他頁)。

http://www.explainmortgage.comhttp://www.explainmortgage.com/mortgage是相同的,所以我想301 http://www.explainmortgage.com/mortgagehttp://www.explainmortgage.com

我在多個域此相同的代碼,最有類似的情況。

所以我想寫一個RewriteCond RewriteRule對,它將覆蓋使用此代碼庫的所有域上的這種情況。

因此,這裏的規則(在僞代碼),我想:

if ({HTTP_HOST}) contains ({REQUEST_URI} minus the leading /) 
then 301 to http://{HTTP_HOST} 

例子:

{HTTP_HOST} == 'www.explainmortgage.com' 
{REQUEST_URI} == '/mortgage' 

{HTTP_HOST} == 'www.explaincars.com' 
{REQUEST_URI} == '/cars' 

{HTTP_HOST} == 'www.explaineducation.com' 
{REQUEST_URI} == '/education' 

{HTTP_HOST} == 'www.explainelectronics.com' 
{REQUEST_URI} == '/electronics' 

所以,如果有任何正則表達式大師在那裏,想給我一手,我將不勝感激。

回答

3

嘗試:

RewriteCond %{HTTP_HOST} ^(www\.)?explain([^\.]+)\.com$ [NC] 
RewriteCond %{REQUEST_URI}:%2 ^/([^/]+)/?:\1 [NC] 
RewriteRule ^/[R=301,L] 

這裏的竅門是第一組比賽爲explain之後的事情之前的.com%{HTTP_HOST},然後(因爲我們不能在使用變量%第二個參數爲RewriteCond),我們把URI和前一個反向引用放在一起,並使用\1來匹配。如果它們相同,則重定向到/

+0

令人敬畏的工作@JonLin,工作完美,並在我所有的域名上工作,謝謝。 – 2012-08-01 18:22:51

0

如果您只想要http://www.explainmortgage.com/mortgage重定向到http://www.explainmortgage.com,那麼.htaccess文件中的以下規則將執行此操作。 NC標誌使比較情況不敏感。這不會影響(重定向或重寫)URI=/mortgage/

RewriteRule ^mortgage$/[R=301,L,NC] 

從你對此有何評論你說你想要更多的URL重定向到主頁,那麼也許下面可能有助於實現你想要什麼。以下內容會將指向不存在的文件或目錄的URL重定向到任何域的主頁。例如,如果「/ mortgage」,「/ bob」,「/ carol」不作爲文件存在,那麼它們將全部重定向到「/」。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ./[R=301,L] 
+0

我知道如何做到這一點,我想要一組適用於多種情況的規則,這些規則將在添加新域和類別時起作用:http://www.explaincars.com/cars,http://www.explaineducation。 com/education,http://www.explainelectronics.com/electronics等...我不想爲每個域添加一行到我的.htaccess文件。我正在使用開源代碼庫,並且希望儘可能避免對其進行編輯。 – 2012-08-01 16:04:23

+0

我還有一個問題,在.htaccess文件中,如果URL是http://www.explainmortgage.com/mortgage,{REQUEST_URI}是否等於抵押或/抵押? – 2012-08-01 16:07:37

+0

你的問題包含一個誤解。 HTTP_HOST變量只包含請求的主機名。它不包含任何URL路徑信息。 – HeatfanJohn 2012-08-01 16:19:57