2011-09-21 19 views
1

htaccess的重寫規則說我有以下站點:子站點

http://example.com/site

這是我在想,如果我能得到這樣的事情

相同的

http://site.example.com

http://site.example.co m/var/

使用apache2的mod_rewrite。


這裏是我的嘗試:

RewriteEngine on 
RewriteRule ^([^/\.]+)$ /site/?var=$1 

這就像當URL是http://example.com/site魅力,而是因爲我只是一個初學者,我不知道如何得到這個爲http://site.example.com工作。

任何幫助將非常感激。

+0

你把.htacess文件放在哪裏?在網站目錄? – undone

+0

是的,我已經把它放到mydomain.com/html/site那是網站目錄 – Simone

+0

我很困惑!你確定你的重寫規則適用於example.com/site?因爲它在我看來應該適用於site.example.com! – undone

回答

3

第一部分重定向example.com/site/varsite.example.com/var。 二重寫規則,重寫您的網址site.example.com,

RewriteEngine on 
RewriteBase/
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^(www\.)?example.com/site/(.*) 
RewriteRule (.*) http://site.example.com/%1 [R=301,L] 

RewriteRule ^([^/\.]+)$ /site/?var=$1 [L] 

說明:
RewriteEngine敘述上
此行啓用重寫引擎。否則可能無法工作。
RewriteBase/
這行設置了重寫基地。這個指令在想要爲每個目錄重寫設置基本URL時使用。默認值是當前的物理路徑,但在大多數情況下,基於URL的路徑與物理文件名路徑沒有直接關係,所以使用默認值是錯誤的。例如當使用虛擬目錄時,你應該正確地設置這個選項,以使mod_rewrite運行良好。 ?

的RewriteCond%{HTTP_HOST}%{REQUEST_URI} ^(WWW)example.com/site/(.*)在此行中第一阿帕奇
加入到變量(主機地址:www.example.com和請求URI :/site/var)。然後用我給出的模式檢查結果。首先結果可以www. 。之後應該是example.com/site/並在最後它可以是任何東西。

RewriteRule (.*) http://site.example.com/%1 [R=301,L] 


這一行重定向用戶請求http://site.example.com/%1與301的狀態代碼。因爲它有L標誌這是apache檢查的最後一條重寫規則。 %1是重寫條件中標記爲(.*)的所有內容。

RewriteRule ^([^/\.]+)$ /site/?var=$1 [L] 


這條線是你把你的問題行:它重寫不具有//site/?var=$1點的每個URL。

+0

它的工作原理!謝謝!而且..可以請你簡單地向我解釋你的代碼嗎?賞金將是你的:) – Simone

+0

只是覺得它不起作用,如果我輸入** www **。example.com/site ...我該如何解決? – Simone

+0

@Simone Vittori我編輯了代碼並添加了解釋! – undone

1

我已經找到了解決辦法:

RewriteBase/

一些主機需要RewriteBase規範,以工作。 我希望這可以幫助。