Url RewriteRule条件

时间:2011-10-06 01:01:13

标签: regex url-rewriting

我正在为我的网站开发一些搜索引擎优化,并使用category/this-cat.htmlcategory/this-cat-p2.html等网址分别重定向到index.php?mode=viewCat&id=this-catindex.php?mode=viewCat&id=this-cat&start=10。 问题是我的RewriteRule需要一个条件来检查URL中是否存在-p2部分,然后返回0或p之后的数字。

现行规则:

RewriteRule ^category/(.*?)\.html$ index.php?mode=viewCat&title=$1

我原本认为这个的正确语法是:

RewriteRule ^category/(.*?)(?(-p)(.*?)|0)\.html$ index.php?mode=viewCat&title=$1&start=$2

但是,这会导致服务器返回500错误。 即使在阅读了教程并在过去一周与他们一起工作之后,我仍然对它们一无所知。任何人都可以解释如何像这项工作一样有条件吗?

1 个答案:

答案 0 :(得分:2)

你很亲密。我相信你要做的不是捕获可选的-p#分组,而是想要数字(如果它存在)。组的非捕获标志是?:前缀。

RewriteRule ^category/(.*?)(?:-p(\d+))?\.html$ index.php?mode=viewCat&title=$1&start=$2

注意:我使用\d(数字),因为最好具体说明您要匹配的内容。 start也会有数字或没有数字。您的服务器端代码更适合处理您描述的其余逻辑。