2012-08-26 76 views
0

需要移动我的博客的位置,我试图确保通过旧链接捕获所有链接并将其重定向到新链接。重定向包含问号的网址

的博客已经从http://example.com/移到http://example.com/blog/

用于生成与我已经决定不这样做后名(默认)之前的日期,保持网址难忘的URL。

问题是,有一个?字符的原始URL(由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的一部分!?

感谢您的参观!

马丁:)

回答

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之前使用RewriteCond检查(并捕获)查询字符串。

+1

您需要''1'末尾的'?',否则查询字符串会被追加到末尾。 –

+0

我用%替换了$ {QUERY_STRING}之前的$,并使用了?正如@jon所建议的,它的工作原理!谢谢! – Martin

+0

@JonLin很好的电话。我忘记了将查询字符串复制到目标URL。 – Bobulous