.htaccess中的正则表达式(可选子目录)

时间:2014-11-25 12:48:34

标签: regex apache .htaccess mod-rewrite

我的.htaccess文件中的正则表达式有问题。

这就是我现在所拥有的:

RewriteRule ^([a-z0-9\-_]+)/?(.*) $2 [NC]
RewriteRule ^page/([a-z0-9\-_]+)/? page.php?id=$1 [NC,QSA]

第一条规则应该删除一个可选的"部分"部分来自路径,所以这两个:

/section-2/news.php?id=73
/news.php?id=73

导致

/news.php?id=73

这很好。

第二条规则应该发送这些路径:

/section-2/page/page-title
/page/page-title

为:

/page.php?id=page-title

但是第一个RewriteRule显然是从没有"部分"的路径中删除/ page /。因此,第二条规则并不适用。

有关如何解决此问题的任何建议?如果第一部分是/ page /?

,如何使第一条规则不匹配

2 个答案:

答案 0 :(得分:0)

你可以在模式中定义单词“section”吗?

RewriteRule ^(section[a-z0-9\-_]+)/?(.*) $2 [NC]

答案 1 :(得分:0)

经过更多的谷歌搜索和反复试验后,我想出了第一条规则,它排除了从第/页开始的路径。

RewriteRule ^((?!page/)[a-z0-9\-_]+)/?(.*) $2 [NC]

这似乎有效,但如果有人遇到这个问题,并就如何改进或优化这些规则提出任何建议,请分享!