Apache URL重写:处理两个类似的规则

时间:2013-05-05 04:51:59

标签: apache .htaccess mod-rewrite url-rewriting

问题:

如何在相似的情况下编写规则?

我的规则:

RewriteRule ^blog/([0-9]+)/[-0-9a-zA-Z]+/?$ index.php?action=blog&postID=$1 [NC]
RewriteRule ^blog/([0-9]+)/[-0-9a-zA-Z]+/?$ index.php?action=blog&category=$1 [NC]

我想要完成的是:

domain.com/blog/1/title-of-postdomain.com/blog1/name-of-category

这可能吗?我有什么选择?

1 个答案:

答案 0 :(得分:1)

由于URI略有不同,您应该可以在.htaccess

中使用它
RewriteRule ^blog/([0-9]+) index.php?action=blog&postID=$1 [L]
RewriteRule ^blog([0-9]+)/ index.php?action=blog&category=$1 [L]

我们不需要[NC]标志,因为我们只匹配一个数字。 [L]标志告诉Apache如果匹配则停止处理。由于您没有对标题进行任何操作,因此无需一直搜索到行尾。找到 postID 类别后,我们应该拥有所有信息。

要同时匹配两者,您可以在单个规则中尝试此操作。

RewriteRule ^blog([0-9]+)/([0-9]+) index.php?action=blog&category=$1&postID=$2 [L]
RewriteRule ^blog/([0-9]+) index.php?action=blog&postID=$1 [L]
RewriteRule ^blog([0-9]+)/ index.php?action=blog&category=$1 [L]

如果您正在设置Virtual Hosts,那么您必须添加前面的斜杠:

RewriteRule ^/blog/([0-9]+) /index.php?action=blog&postID=$1 [L]
RewriteRule ^/blog([0-9]+)/ /index.php?action=blog&category=$1 [L]