2011-04-11 80 views
0

好的,目的是爲我們的成員動態創建無限數量的子域。 因此,對www.example.com/sub_index.php?user=demo的請求將轉換爲demo.example.com網址,而www.example.com由index.php提供。子域中的子頁面

我已經啓用名稱服務器和Web服務器來接受通配符請求(實際上我聯繫我的託管服務器來做到這一點)。

在htaccess的一部分,我有以下幾點:

####rewrite example.com into www.example.com 
RewriteCond %{HTTP_HOST} ^example.com 
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*index\.htm([#?][^\ ]*)?\ HTTP/ 
RewriteRule ^(([^/]+/)*)index\.htm$ http://www.example.com/$1 [R=301,L] 

####subdomains 
RewriteCond %{HTTP_HOST} !^www\.example.com 
RewriteCond %{HTTP_HOST} ([a-zA-Z0-9]+)\.example.com 
RewriteRule ^(.*)$ sub_index.php?user=%1 

因此,請求demo.example.com/和demo.example.com/index.php由www.example服務。 ?COM/sub_index.php用戶=演示

我的問題是,我不能找到一種方法,有子頁面的子域 例如工作:demo.example.com/somepage.php應該由www.example送達。 com/sub_page.php?user = demo 而demo.example.com/otherpage.php?id=5應該由www.example.com/sub_page2.php?user=demo & id = 5。

謝謝你的任何建議/提示

回答

0

爲了讓您的重寫規則管理,你最好的辦法是改造的URL 沒有引入新的變量。

在你的例子中,不可能使用簡單的文本替換從somepage.php到sub_page.php,然後從otherpage.php到sub_page2.php - 每個頁面都需要一個新的規則,因爲只有你瞭解映射。它更容易將結果網址基於源網址中的數據。

例如,你可以設計一個方案,其中:

demo.example.com/somepage.php?start=5 

轉變成

www.example.com/sub_somepage.php?user=demo&start=5 

有了這個計劃,目標腳本的名稱可以從原始腳本的名稱派生。該方案的重寫規則如下所示:

RewriteRule ^/([A-Za-z0-9_]+\.php) /sub_$1?user=%1 [qsappend] 

使重寫規則正常工作可能非常棘手。當您優化的規則,你可能會想添加到您的配置:

RewriteLog "/tmp/httpd-rewrite.log" 
RewriteLogLevel 5 

然後,您可以檢查您的規則做你想要什麼。有關這些指令如何工作的更多信息在httpd.apache.org。特別是,如果您想重定向到其他主機以提供內容,則必須將新主機名添加到替換和[重定向]標誌。

+0

重寫規則^ /(A-ZA-Z0-9 _] + \。PHP)/ sub_ $ 1?USER =%1 qsappend] 這部作品sub_index.php 但給我sub_other_page.php 404錯誤 這兩個頁面都上傳到根文件夾中 – andrew 2011-04-11 13:23:48