htaccess将带有查询字符串的旧URL重定向到新的SEO URL

时间:2013-02-21 10:06:06

标签: .htaccess redirect

我知道这是一个常见的问题/问题,但我花了几个小时寻找答案,我找到了太多不同的解决方案,彼此之间的差别太大了。我想知道实现这一目标的“最佳”方式(最佳实践)。

我的htacces文件看起来像这样:

RewriteEngine On

# Redirect non-www URLs to www-prefixed ones
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# Redirect HTTPS requests to HTTP ones
RewriteCond %{HTTPS} =on
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R,L]

# Redirect URLs with trailing slashes to ones without it
RewriteRule ^([^/\.]+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

# Rewrite pretty URLs
RewriteRule ^([^/\.]+)$ index.php?page=$1 [L]

现在需要执行最后一个重要步骤:重定向旧网址,例如

http://www.domain.com/index.php?page=abchttp://www.domain.com/?page=abc

到新的:

http://www.domain.com/abc

我知道我应该检查{QUERY_STRING}并将此重定向放在重写URL的最后一行之前,或者不是?如何正确编写这样的规则?

1 个答案:

答案 0 :(得分:3)

要将http://www.domain.com/index.php?page=abc and http://www.domain.com/?page=abc重定向到新的,请使用以下附加规则:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(?:index\.php)?\?page=([^\s]+) [NC]
RewriteRule ^ /%1? [R=301,L]