我在.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=large
和colour=green
永远不会更改,而pattern=$1
1}}可以是许多不同的值。
以上代码完美无缺。但是,问题是我现在卡在两个指向完全相同内容的URL中。为了解决这个问题,我想将旧的,丑陋的查询字符串重定向到SEO友好URL。到目前为止我所尝试的并不起作用 - 谷歌今天并不是特别友好。
任何人都可以提供工作代码来放入我的.htaccess文件,将丑陋的重定向到新的URL,同时保留重写吗?谢谢!
答案 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]