Apache RewriteRule匹配^ abc /?(.*)$因此缺少^ abcd /?(。*)

时间:2014-04-09 20:30:27

标签: regex apache .htaccess mod-rewrite

我有一个以编程方式生成的网站规则集,如下所示:

RewriteEngine on
RewriteRule ^abc/?(.*)$ /$1?organisation=abc [QSA,L]
RewriteRule ^fghij/?(.*)$ /$1?organisation=fghij [QSA,L]
RewriteRule ^fghijklmn/?(.*)$ /$1?organisation=fghijklmn [QSA,L]

这样我们的客户就可以在他们的域上为自己的各种客户设置多个minisites。 因为url可能以/或/blah.php结尾,所以我创建了上面的规则,但这意味着RewriteEngine会在^ fghij /?(。)$之后停止,并且永远不会找到^ fghijklmn /?(。 )$ 我怎样才能改写我的规则,以便每个组织都能正确匹配? 非常感谢提前

2 个答案:

答案 0 :(得分:2)

您的正则表达式似乎有问题,因为^fghij/?(.*)$也会匹配fghijklmn

试试这段代码:

RewriteEngine on
RewriteRule ^abc(/.*)?$ $1?organisation=abc [QSA,L]
RewriteRule ^fghij(/.*)?$ $1?organisation=fghij [QSA,L]
RewriteRule ^fghijklmn(/.*)?$ $1?organisation=fghijklmn [QSA,L]

答案 1 :(得分:0)

我认为/?在^ abc /?(.*)$说可选匹配/然后匹配其他任何东西所以你可能想要像

RewriteRule ^abc//?(.*)$ /$1?organisation=abc [QSA,L]

这会强制执行一个/,因为你说URL总是以/或/blah.php结尾

另外,我不确定为什么你不只是尝试在第一个斜杠之前将组织与非贪婪的匹配器匹配,然后将其附加到查询字符串而不是手动创建它。