0

我的博客的 .htaccess 设置为通过多个 URL 访问一个页面,并根据访问的 URL 显示不同的内容。

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 都是唯一的,因此我使用帖子 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/

没有。

4

2 回答 2

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.

于 2012-07-16T06:38:40.547 回答
0

虽然 webarto 评论是很好的建议,但您的问题是缺少 [:

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

不是

^([0-9]{4})/([0-9]{2})/([0-9]{2})/(^/]+)/?$
于 2012-07-16T07:36:15.457 回答