2015-03-19 41 views
1

有了這個的.htaccess代碼:mod_rewrite的多語言,多URL級別

<IfModule mod_rewrite.c> 
    RewriteCond %{HTTP_HOST} !www.example.com$ [NC] 
    RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).example.com [NC] 
    RewriteRule ^(.*)/(.*)$ http://example.com/$2?lang=%2 [L,P] 
</IfModule> 

這偉大工程!對於下面的例子:

RewriteRule ^awards$ premios.php [L,QSA] 

http://pt.example.com/awards ==> /premios.php?lang=pt

http://en.example.com/awards ==> /premios.php?lang=en

如果URL具有多級別如下:

RewriteRule ^gallery/funny$ gallery-funny.php [L,QSA] 

該URL http://pt.example.com/gallery/funny不起作用!

任何幫助?我迷失在這裏。

+0

你可以顯示完整的.htaccess有問題嗎?然後再添加重寫不起作用。 – anubhava 2015-03-19 15:36:50

回答

1

您希望系統上的每個用戶自動將username.domain.com映射到其主目錄。

RewriteEngine On 
# Skip www.domain.com 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com 
RewriteRule ^/(.*)$ /home/%1/www/$1 [L] 

第一個RewriteCond從www.domain.com跳過對我們想要通過常規機制處理的內容的請求。排除您不想映射到主目錄的其他主機名也可能很有用。

第二個RewriteCond存在來捕獲請求的主機名。當在RewriteCond中捕獲匹配(通過使用括號)時,捕獲的模式進入變量%1,%2,%3等等。在這種情況下,對username.domain.com主機名的請求將導致%1被設置爲用戶名。

最後,我們的RewriteRule捕獲整個請求的URL,並使其從該用戶的主目錄中提供。例如,請求http://rbowen.domain.com/foo/bar.html將導致提供文件/home/rbowen/www/foo/bar.html。

請務必注意,您仍然需要對DNS服務器進行必要的更改才能使這些主機名正常工作。通常,這可以通過創建通配符DNS條目映射* .domain.com到此服務器來完成。您將需要查閱有關特定DNS服務器的文檔,以瞭解如何完成此操作。

+0

https://wiki.apache.org/httpd/RewriteVhosts?我不希望「讓系統中的每個用戶自動將username.domain.com映射到其主目錄」:) – 2015-03-19 12:29:12