301使用语言参数重定向旧网址

时间:2016-12-16 21:14:12

标签: apache .htaccess redirect mod-rewrite

我的apache htaccess文件需要一些301重定向。旧URL在末尾包含变量,并具有如下结构:

/furniture-248/category/570-shelves.html?lang=en
/all-products/furniture-248/shelves.html?page=2&lang=en
/store/product/asearch.html?path=7_632&lang=en&Itemid=284

新网址不包含这种性质的参数,只是形式:

main-cat/subcat/sale.html

我在htaccess文件中尝试了常规301重定向,该文件适用于没有参数的网址,但包含?lang=en的网址根本不起作用。

这就是我的尝试:

Redirect 301 /furniture-248/category/570-shelves.html?lang=en http://www.domain.com/shelves.html

我非常感谢任何帮助和建议。

非常感谢提前

1 个答案:

答案 0 :(得分:0)

您不能将查询字符串用作此类重定向的一部分。你有两个选择。

选项1

采取"?lang = en" part off,只是重定向该URL的所有实例,无论查询字符串是什么。

Redirect 301 /furniture-248/category/570-shelves.html http://www.domain.com/shelves.html

这将使查询字符串保持不变,因此新的URL将包含"?lang = en"如果它存在,或任何其他查询字符串。

但是当然,你可能只需要在有"?lang = en"部分,或在重定向可能不可接受时保持查询字符串完整。在这种情况下,它需要......

选项2

使用mod_rewrite:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^lang=en$
RewriteRule ^furniture-248/category/570-shelves\.html$ http://www.domain.com/shelves.html? [R=301,L]

这完全符合您的要求,将/furniture-248/category/570-shelves.html?lang=en重定向到http://www.domain.com/shelves.html并且仅将其重定向。

请注意..

  • 查询字符串是单独匹配的。

  • 未使用匹配部分的正向斜线(因为您在网站根级别.htaccess文件中意味着打开斜杠)。

  • 重定向网址上的结束问号很重要,因为它告诉引擎删除现有的查询字符串,这就是您想要的。

  • [R = 301,L]表示执行301重定向,不再处理此网址上的网址重写。

  • 对于RewriteRule中的匹配部分," html"之前的点。是" \"因为dot在正则表达式中有特殊含义。

  • 同样对于匹配部分,在RewriteCond和RewriteRule中,^表示字符串的开头,$表示字符串的结尾,因此我们正好匹配,而不是它可能是一个较长的字符串的一部分。

最后,如果你要添加其中的一些,你只需要" RewriteEngine On"部分一次,在顶部。每个部分都需要另外两个部分。

请务必测试使用此方法添加的所有重定向,因为mod_rewrite比我在此简单说明中提到的更多。