有必要移动我的博客的位置,我正在努力确保通过旧链接捕获所有链接并将它们重定向到新链接。
博客已从http://example.com/移至http://example.com/blog/
用于生成帖子名称之前的日期(默认情况下),我决定不这样做,以保持网址令人难忘。
问题是有一个?原始网址中的字符(我正在使用的CMS生成的默认网址,这会导致重定向问题:
RewriteRule ^post.php?s=2012-01-01-blog-post$ /blog/blog-post? [R=301,L]
所以我需要逃避?不知怎的,但我无法弄清楚如何!
我可以使用更通用的重定向来避免?但是这会重定向到列表页面,而不是文章本身:
RewriteRule ^post.php$ http://tempertemper.net/blog/? [R=301,L]
如何阅读?作为URL的一部分!?
谢谢你看看!
马丁:)
答案 0 :(得分:1)
我认为您需要使用RewriteCond来检查是否存在QUERY_STRING值,然后假设查询字符串与您的博客模式匹配,捕获博客名称,然后使用RewriteRule中捕获的值。像这样:
RewriteCond ${QUERY_STRING} ^s=[0-9]{4}-[0-9]{2}-[0-9]{2}-(.*)$
RewriteRule ^post.php$ /blog/%1 [R=permanent,L]
%1指的是匹配的RewriteCond中的第一个捕获模式(除非RewriteCond匹配,否则RewriteRule不会触发)。
这是必要的原因是RewriteRule无法将查询字符串视为请求路径的一部分,因此您必须在RewriteRule之前使用RewriteCond检查(并捕获)查询字符串。