多个重写规则,在同一位置具有不同的参数

时间:2014-09-30 17:58:57

标签: apache .htaccess mod-rewrite

我想知道以下是否可行

RewriteRule ^([^/]*)/([^/]*)$                   /search.php?type=$1&query=$2 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$           /search.php?type=$1&query=$2&condition=$3 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$   /search.php?type=$1&query=$2&page=$3[L]

正如您所看到的,第一行和第三行类似于唯一的区别是第三个参数的名称,第二个规则将用于诸如

之类的页面
/isbn/1203910293/new

虽然第三条规则将用于诸如页面别名页码

之类的页面
/title/harry-potter/2

我知道这似乎很愚蠢,因为我可以调用condition参数,但如果使用参数page

,它将来会清除

1 个答案:

答案 0 :(得分:0)

第三种规则模式^([^/]*)/([^/]*)/([^/]*)/([^/]*)$匹配

/title/harry-potter/2

因为该规则需要四个部分,例如

/title/harry-potter/2/xyz

或至少是斜杠

/title/harry-potter/2/

相反,它将与第二个规则模式匹配,因为它也有三个部分,就像

一样
/isbn/1203910293/new

如果您想匹配页码,您需要匹配类似于第二条规则的规则,但更具体,例如

RewriteRule ^([^/]*)/([^/]*)/(\d+)$   /search.php?type=$1&query=$2&page=$3 [L]