2011-11-03 62 views
1

尋找一些專家在寫一些.htaccess重寫規則的幫助。這是我想要實現的:複雜的.htaccess規則

 
#) User requests     Displayed to User As   Actual Request to Server 
1) www.example.com*     example.com*     example.com* 
2) example.com      example.com      example.com/index.php 
3) example.com/index.php   example.com      example.com/index.php 
4) example.com/mypage    example.com/mypage    example.com/index.php?p=mypage 
5) m.example.com     m.example.com     example.com/mobile.php 
6) m.example.com/index.php   m.example.com     example.com/mobile.php 
7) m.example.com/mobile.php   m.example.com     example.com/mobile.php 
8) m.example.com/mypage    m.example.com/mypage   example.com/mobile.php?p=mypage 

這是我迄今爲止的工作。它需要照顧第1,3和4行。一旦我開始添加移動設備,我就迷路了。

 
RewriteEngine On 
RewriteBase/

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

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] 
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L] 

RewriteRule ^([a-z\-]+)$ /index.php?p=$1 [L] 

我花了太多時間試圖弄清楚這一點,而我只是一直跑到死路一條。我不斷收到它的一部分工作,但其他部分突破。任何幫助,將不勝感激。

謝謝!

回答

0

我想你必須先添加移動規則,這樣纔不會意外觸發其他規則。

RewriteEngine On 

# 6,7 
RewriteCond %{HTTP_HOST} ^m\. [NC] 
RewriteRule ^\/(index|mobile)\.php$ http://m.example.com/ [R=301,L] 

# 5,8 
RewriteCond %{HTTP_HOST} ^m\. [NC] 
RewriteRule ^([a-z\-]+)$ /mobile.php?p=$1 [L] 

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

# 3 (and example.com/mobile.php) 
RewriteRule ^\/(index|mobile)\.php$ http://example.com/ [R=301,L] 

# 2,4 
RewriteRule ^\/([a-z\-]+)$ /index.php?p=$1 [L]