RewriteRule不起作用,而其余的则起作用

时间:2012-07-16 06:14:03

标签: .htaccess redirect blogs permalinks

我的博客.htaccess的设置方式是通过多个网址访问一个网页,并根据访问的网址显示不同的内容。

http://kn3rdmeister.com/category/blog/
http://kn3rdmeister.com/2012/
http://kn3rdmeister.com/2012/07/

所有人实际上都在使用http://kn3rdmeister.com/blog.php

.htaccess文件非常方便,因为我只需要使用不同的查询字符串重定向到一个页面(几乎曾经)。在经历了很多事情之后,我的所有规则终于奏效了,我很高兴他们这样做了。好吧,几乎所有这些都有效。最后一个没有。

.htaccess:

RewriteEngine On

RewriteRule ^blog\.php$ /category/blog/ [R=301,L]
RewriteRule ^category/blog/?$ blog.php [L]

RewriteRule ^category/blog/page/?$ /category/blog/ [R=301,L]
RewriteRule ^category/blog/page/([0-9]*)/?$ /category/blog/?pagenum=$1 [L]

RewriteRule ^([0-9]{4})/?$ /category/blog/?year=$1 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/?$ /category/blog/?year=$1&month=$2 [L] 
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/?$ /category/blog/?year=$1&month=$2&day=$3 [L] 
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(^/]+)/?$ /category/blog/?url=http://kn3rdmeister.com/$1/$2/$3/$4/ [L]

最后一条规则应该重定向到每篇博文的“永久链接”页面。由于每个URL都是唯一的,我使用post URL作为唯一标识符。本质上,它应该通过“blog.php”传递“url”查询字符串。 PHP脚本接管,看到设置了“url”查询字符串,然后在其行中加载唯一具有该确切URL的帖子。

该脚本有效,但重定向不起作用。直接进入

http://kn3rdmeister.com/blog.php?url=http://kn3rdmeister.com/2012/07/04/amsterdam-ave/

将加载正确的内容。但是,转到

http://kn3rdmeister.com/2012/07/04/amsterdam-ave/

2 个答案:

答案 0 :(得分:0)

尝试添加QSA (Query String Append)。此外,颠倒规则,以便“更深层次”的链接在顶部。

RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(^/]+)/?$ /category/blog/?url=http://kn3rdmeister.com/$1/$2/$3/$4/ [QSA,L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/?$ /category/blog/?year=$1&month=$2&day=$3 [QSA,L] 
RewriteRule ^([0-9]{4})/([0-9]{2})/?$ /category/blog/?year=$1&month=$2 [QSA,L] 
RewriteRule ^([0-9]{4})/?$ /category/blog/?year=$1 [QSA,L]

,您不能在其他规则中使用重写链接。因此,只要您category/blog/将其替换为blog.php

答案 1 :(得分:0)

虽然webarto评论是好建议,但你的问题是缺失[:

^([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/]+)/?$

^([0-9]{4})/([0-9]{2})/([0-9]{2})/(^/]+)/?$