0

我在 url 重写时遇到问题。

这是我的 .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>

我不知道为什么,但它不起作用。例如,当我去一个 url likeblog/my-category/1-5/并 print out 时$_GET,它没有键,就好像我在 url 上一样blog/。对不起这个问题,因为它很可能是重复的,但我真的不知道该怎么做,我想我不会理解基于其他人问题的解决方案的问题是什么。

4

1 回答 1

1

规则按照遇到的顺序(自上而下)进行处理。此外,您正在逃避一些不需要逃避的事情。-最后括号内的连字符[]不需要转义。如果它们在事物之间,则它们被视为范围(例如。[0-9])。斜杠/不需要转义,但有时可能不需要尾部斜杠(取决于您的设置),因此我添加了一个?字符以使它们并不总是需要。

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]

如果您使用过preg_PHP 中的函数,那么您的斜线转义习惯可能来自于许多在线示例和书籍,因为许多在线示例和书籍都使用/字符作为分隔符。

于 2013-07-29T15:24:34.153 回答