重定向包含问号的URL

时间:2012-08-26 15:17:59

标签: .htaccess mod-rewrite redirect http-status-code-301

有必要移动我的博客的位置,我正在努力确保通过旧链接捕获所有链接并将它们重定向到新链接。

博客已从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的一部分!?

谢谢你看看!

马丁:)

1 个答案:

答案 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检查(并捕获)查询字符串。

相关问题