Php 一个url重写规则适用于6种场景

Php 一个url重写规则适用于6种场景,php,regex,apache,url-rewriting,Php,Regex,Apache,Url Rewriting,我有一个适用于索引页的重写规则 RewriteRule ^index$ index.php [L] RewriteRule ^index/$ index.php [L] RewriteRule ^index/page/(0?[1-9]|1[0-2])$ index.php?recordstart=$1 [L] RewriteRule ^index/page/(0?[1-9]|1[0-2])/$ index.php?recordstart=$1 [L] 我有6页类似的场景 例如 我正在寻找一个重

我有一个适用于索引页的重写规则

RewriteRule ^index$ index.php [L]
RewriteRule ^index/$ index.php [L]
RewriteRule ^index/page/(0?[1-9]|1[0-2])$ index.php?recordstart=$1 [L]
RewriteRule ^index/page/(0?[1-9]|1[0-2])/$ index.php?recordstart=$1 [L]
我有6页类似的场景

例如

我正在寻找一个重写,可以匹配六个确切的场景,而不是重复四行六次

谢谢

类似于:

RewriteRule ^(scenario1|scenario2|scenario3)$ $1.php [L]
RewriteRule ^(scenario1|scenario2|scenario3)/$ $1.php [L]
RewriteRule ^(scenario1|scenario2|scenario3)/page/(0?[1-9]|1[0-2])$ $1.php?recordstart=$2 [L]
RewriteRule ^(scenario1|scenario2|scenario3)/page/(0?[1-9]|1[0-2])/$ $1.php?recordstart=$2 [L]
感觉很脏,但如果要排除除上述场景之外的所有其他场景

编辑:我也将在这里添加它,您可以通过检查
/
来删除两行规则,在它之后,它将与尾随的
/
匹配或不匹配。解决办法是:

   RewriteRule ^(scenario1|scenario2|scenario3)/?$ $1.php [L]
   RewriteRule ^(scenario1|scenario2|scenario3)/page/(0?[1-9]|1[0-2])/?$ $1.php?recordstart=$2 [L]
|
(pipe)在regex中用于提供替代方案,实际上它的意思是“或”。您可以添加任意数量的值,用
|
s分隔

如果您知道自己在做什么,也可以使用
^([a-zA-Z]+)/?$
,但这意味着您的规则将捕获每个仅由英文字母组成的值。那么你必须处理错误

我已经简化了您的规则,在最后添加了
/?
,这意味着可选的结束斜杠。

这有效吗(未测试)

我认为您还可以将规则简化为以下内容:

RewriteRule ^(index|graduate|...)/?$ $1.php [L]
RewriteRule ^(index|graduate|...)/page/(0?[1-9]|1[0-2])/?$ $1.php?recordstart=$2 [L]

首先,为了节省一些空间,您可以将前四条规则缩短为两条,如下所示:

RewriteRule ^index(/|)$ index.php [L]
RewriteRule ^index/page/(0?[1-9]|1[0-2])(/|)$ index.php?recordstart=$1 [L]
然后可以按如下方式修改这两行:

RewriteRule ^(page1|page2|page3|page4|page5|page6)(/|)$ $1.php [L]
RewriteRule ^(page1|page2|page3|page4|page5|page6)/page/(0?[1-9]|1[0-2])(/|)$ $1.php?recordstart=$1 [L]
RewriteRule ^(index|graduate|...)/?$ $1.php [L]
RewriteRule ^(index|graduate|...)/page/(0?[1-9]|1[0-2])/?$ $1.php?recordstart=$2 [L]
RewriteRule ^index(/|)$ index.php [L]
RewriteRule ^index/page/(0?[1-9]|1[0-2])(/|)$ index.php?recordstart=$1 [L]
RewriteRule ^(page1|page2|page3|page4|page5|page6)(/|)$ $1.php [L]
RewriteRule ^(page1|page2|page3|page4|page5|page6)/page/(0?[1-9]|1[0-2])(/|)$ $1.php?recordstart=$1 [L]