301通过.htaccess将查询字符串重定向到SEO友好URL

时间:2011-04-26 12:26:39

标签: apache .htaccess url-rewriting seo

我在.htaccess文件上写了一些代码,它允许使用SEO友好的URL而不是丑陋的查询字符串。以下代码将浏览器中的SEO友好版本重写为服务器上的查询字符串版本。

RewriteEngine On
RewriteRule ^seo/([^/]*)/$ /directory/script.php?size=large&colour=green&pattern=$1 [L]

这样丑陋的

http://www.mysite.com/directory/script.php?size=large&colour=green&pattern=striped

现在很漂亮

http://www.mysite.com/directory/seo/striped/

只是解释一下代码; seo可以在网址中添加更多关键字,/directory/是.htaccess文件所在的目录,参数size=largecolour=green永远不会更改,而pattern=$1 1}}可以是许多不同的值。

以上代码完美无缺。但是,问题是我现在卡在两个指向完全相同内容的URL中。为了解决这个问题,我想将旧的,丑陋的查询字符串重定向到SEO友好URL。到目前为止我所尝试的并不起作用 - 谷歌今天并不是特别友好。

任何人都可以提供工作代码来放入我的.htaccess文件,将丑陋的重定向到新的URL,同时保留重写吗?谢谢!

2 个答案:

答案 0 :(得分:4)

这应该可以解决问题:

RewriteEngine On

## Redirect to pretty urls
# The '%1' in the rewrite comes from the group in the previous RewriteCond
RewriteCond %{REQUEST_URI} !seo
RewriteCond %{QUERY_STRING} ^size=large&colour=green&pattern=([a-zA-Z]*)$
RewriteRule (.*) /directory\/seo\/%1\/? [L,R=301]

## Rewrite to long url, additional parameter at the end will cause
## the internal redirect not to match the previous rule (would cause redirect loop)
RewriteRule ^directory\/seo\/([^/]*)/$ /directory/script.php? size=large&colour=green&pattern=$1&rewrite [L]

您还可以根据需要匹配大小和颜色,也可以将其更改为正则表达式组,并使用相应的%N

希望这有帮助。

答案 1 :(得分:0)

未经测试,但这可能有用......

RewriteRule ^ directory / script.php?size = large& color = green& pattern =(。*)$ / seo / $ 1 /? [R = 301,NE,NC,L]