Regex 复杂的.htaccess规则

Regex 复杂的.htaccess规则,regex,apache,.htaccess,Regex,Apache,.htaccess,正在寻求专家对编写一些.htaccess重写规则的帮助。以下是我试图实现的目标: #) User requests Displayed to User As Actual Request to Server 1) www.example.com* example.com* example.com* 2) example.com

正在寻求专家对编写一些.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) 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] 重新启动发动机 重写基/ 重写cond%{HTTP_HOST}^www\.(.+)$[NC] 重写规则^http://%1%{REQUEST_URI}[R=301,L] RewriteCond%{THE_REQUEST}^GET.*index\.php[NC] 重写规则(.*)索引\.php/*(.*)/$1$2[R=301,L] 重写规则^([a-z\-]+)$/index.php?p=$1[L] 我花了太多的时间试图弄明白这一点,但我总是走到死胡同。我一直让它的一部分工作,但其他部分坏了。任何帮助都将不胜感激


谢谢

我认为您必须首先添加移动规则,这样您就不会意外地首先触发其他规则

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]