我遇到网址重写问题。
以下是我的.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/
上一样。
对于这个问题很抱歉,因为它很可能是重复的,但我真的不知道该怎么做,我想我不明白问题是基于解决其他人的问题。
答案 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_
函数可能是您的斜线转义习惯的来源,因为许多在线示例和书籍使用/
字符作为分隔符。