.htaccess捕获混合URL

时间:2013-12-04 15:11:04

标签: regex .htaccess

我正在尝试匹配这三条路线:

system/session
teams
teams/529f3d87b3f7e2c73d100000

我有以下规则:

RewriteRule ([-A-Za-z0-9]+)/([-A-Za]+)$ /index.php?__module=$1&__action=$2 [L,QSA]
RewriteRule ^([-A-Za-z0-9]+)$ /index.php?__module=$1&__action=index [L,QSA]
RewriteRule ([-A-Za-z0-9]+)/([-A-Za-z0-9]+)$ /index.php?__module=$1&__action=index&id=$2 [L,QSA]

但是,当我转到system/session时抓住teams/529f3d87b3f7e2c73d100000的规则集并制作session = $_GET['id']而不是$_GET['__action']

这有明显的解决方案吗?

1 个答案:

答案 0 :(得分:1)

那是因为你的正则表达式对第一条规则是错误的:

RewriteRule ([-A-Za-z0-9]+)/([-A-Za-z]+)$ /index.php?__module=$1&__action=$2 [L,QSA]

您错过了范围的-z部分,只匹配“a”。

您还应该继续向所有人添加^个匹配项:

RewriteRule ^([-A-Za-z0-9]+)/([-A-Za-z]+)$ /index.php?__module=$1&__action=$2 [L,QSA]