2013-09-28 55 views
1
重寫

我想實現我的博客門戶以下使用的htaccess:的.htaccess - 3種不同的3層不同的URL結構

結構1

example.domain.com/link/sublink - > /blogdisplay.php?page=example &第2頁=鏈路& PAGE3 =子鏈路

結構2

en.domain.com/link/sublink/subsublink - > /index.php?lang=en &頁=鏈接&第2頁=子鏈路& PAGE3 = subsublink

結構3

domain.com/鏈接/子鏈接/子鏈接 - > /index.php?page=link & page2 =子鏈接& page3 =子鏈接

我該如何做到這一點?這是我當前的代碼(這完全不正確的,現在處理的語言,但其他兩個URL結構正常工作):

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^www.domain.com [NC] 
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301] 

RewriteCond %{HTTP_HOST} !^www.[NC] 
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9-]{3,})\.domain.com$ [NC] 
RewriteRule ^$ blogdisplay.php?page=%1 [L,QSA] 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTP_HOST} ^(.+?)\.domain\.com$ [NC] 
RewriteRule ^([a-z0-9-]+)/?$ blogdisplay.php?page=%1&page2=$1 [L,QSA] 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTP_HOST} ^(.+?)\.domain\.com$ [NC] 
RewriteRule ^([a-z0-9-]+)/([a-zA-Z0-9-]+)/?$ blogdisplay.php?page=%1&page2=$1&page3=$2 [L,QSA] 

## If the request is for a valid file 
RewriteCond %{REQUEST_FILENAME} -f 
## don't do anything 
RewriteRule^- [L] 

RewriteRule ^([a-z0-9-]+)/?$ index.php?page=$1 [L,NC] 
RewriteRule ^([a-z0-9-]+)/([a-zA-Z0-9-]+)/?$ index.php?page=$1&page2=$2 [L,NC] 
RewriteRule ^([a-z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ index.php?page=$1&page2=$2&page3=$3 [L,NC] 

回答

2

對於語言的情況下,你可以添加這個額外的情況下(僅低於R = 301規則):

RewriteCond %{HTTP_HOST} ^([a-z]{2})\.domain\.com$ [NC] 
RewriteRule ^([a-z0-9-]+)/([a-z0-9-]+)/([a-z0-9-]+)/?$ index.php?lang=%1&page=$1&page2=$2&page3=$3 [L,NC,QSA] 

PS:此外,我建議略低於移動If the request is for a valid file規則語言規則之上。

+0

我可以將它移動到下面還是上面? (你在上面說的語言規則下面說 –

+0

低於我的'上面的建議的規則':)對不起,語言混亂。即使你在頂部放置'如果請求是針對有效的文件規則',也可以。 – anubhava

+0

工程就像一個魅力。謝謝! :) –