301 通过 .htaccess 将查询字符串重定向到 SEO 友好的 URL
Posted
技术标签:
【中文标题】301 通过 .htaccess 将查询字符串重定向到 SEO 友好的 URL【英文标题】:301 redirect query string to SEO friendly URLs through .htaccess 【发布时间】:2011-08-13 00:19:55 【问题描述】:我在我的 .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
是用来给URL添加更多关键字的,/directory/
是.htaccess文件所在的目录,参数size=large
和colour=green
永远不会改变,而pattern=$1
可以是很多不同的值。
上面的代码完美运行。但是,问题是我现在被两个指向完全相同内容的 URL 卡住了。为了解决这个问题,我想将旧的、丑陋的查询字符串 301 重定向到 SEO 友好的 URL。到目前为止我尝试过的方法都不起作用 - Google 今天也不是特别友好。
任何人都可以提供工作代码放入我的 .htaccess 文件中,将丑陋的重定向到新的 URL,同时保留重写?谢谢!
【问题讨论】:
添加了更多示例 URL 以进行说明。 【参考方案1】:这应该可以解决问题:
重写引擎开启
## 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
希望这会有所帮助。
【讨论】:
感谢您的回答。我试过你的代码;最初,由于代码最后一行的一些额外间距导致内部服务器错误,我将其删除。现在代码导致重定向循环。您的代码是要与我的代码一起运行还是要完全替换它?如果我删除我的代码重定向成功,但会导致 404 错误(似乎不再重写 URL)非常感谢您的 cmets。 嗯,删除了多余的空间,当我粘贴我的答案时一定发生了。无论如何......它是为了替换你的。不过,我现在确实看到了差异。您的初始规则设置为匹配以/seo
开头的 URL,但您的示例重定向 URL 为 /directory/seo
。我的重写设置为匹配后者。如果你能解决这个问题,我们应该能够让它工作。
感谢您的回复,已成功使用我们的代码组合来完成这项工作,如下所示:RewriteCond %REQUEST_URI !seo
RewriteCond %QUERY_STRING ^size=large&colour=green&pattern=([a-zA-Z0-9_-]*)$
RewriteRule (.*) /directory\/seo\/%1\/? [L,R=301]
RewriteRule ^seo/([^/]*)/$ /directory/size=large&colour=green&pattern=$1&rewrite [L]
【参考方案2】:
未经测试,但这可能有效...
RewriteRule ^directory/script.php?size=large&colour=green&pattern=(.*)$ /seo/$1/? [R=301,NE,NC,L]
【讨论】:
感谢您的回答;恐怕我无法让这个工作。没有重定向。以上是关于301 通过 .htaccess 将查询字符串重定向到 SEO 友好的 URL的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess 中带有查询字符串的 301 的正确语法是啥? [关闭]