.htaccess文件中的多个重写规则

时间:2013-07-29 14:20:49

标签: apache .htaccess

我遇到网址重写问题。

以下是我的.htaccess文件的样子:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^blog\/$ /blog.php [L]
RewriteRule ^blog\/[a-zA-Z0-9\-]+\/([0-9]+)-([0-9]+)\/$ /blog.php?action=listposts&categoryid=$1&page=$2 [L]
RewriteRule ^blog\/featured\/([0-9]+)\/$ /blog.php?action=listposts&categoryid=featured&page=$1 [L]
RewriteRule ^blog\/[a-zA-Z0-9\-]+\/([0-9]+)\/[a-zA-Z0-9\-]+\/$ /blog.php?action=viewpost&postid=$1 [L]
</IfModule>

我不知道为什么,但它不起作用。例如,当我转到blog/my-category/1-5/这样的网址并打印出$_GET时,它没有密钥,就好像我在网址blog/上一样。 对于这个问题很抱歉,因为它很可能是重复的,但我真的不知道该怎么做,我想我不明白问题是基于解决其他人的问题。

1 个答案:

答案 0 :(得分:1)

他们遇到过的

Rules are processed in the order(自上而下)。此外,您正在逃避一些不需要转义的事情。 -末尾括号[]内的连字符不需要转义。如果他们在事物之间,他们被视为范围(例如[0-9])。斜杠/不需要转义,但有时可能不需要尾部斜杠(取决于您的设置),因此我添加了?字符以使它们不总是必需的。< / p>

RewriteEngine on
RewriteBase /

RewriteRule ^blog/[a-zA-Z0-9-]+/([0-9]+)-([0-9]+)/?$ /blog.php?action=listposts&categoryid=$1&page=$2 [L]
RewriteRule ^blog/featured/([0-9]+)/?$ /blog.php?action=listposts&categoryid=featured&page=$1 [L]
RewriteRule ^blog/[a-zA-Z0-9-]+/([0-9]+)/[a-zA-Z0-9-]+/?$ /blog.php?action=viewpost&postid=$1 [L]
RewriteRule ^blog/?$ /blog.php [L]

如果您使用PHP中的preg_函数可能是您的斜线转义习惯的来源,因为许多在线示例和书籍使用/字符作为分隔符。