htaccess url重定向参数不起作用

Posted

技术标签:

【中文标题】htaccess url重定向参数不起作用【英文标题】:htaccess url redirects with parameters not working 【发布时间】:2014-11-25 18:59:54 【问题描述】:

我搜索了以前有关带参数的 URL 重定向的问题,但似乎没有一个问题能说明我的特定问题。我不是程序员,所以我真的不知道如何根据我的情况调整其他建议。尝试(并适应其他 URL)的特定 HTACCESS 字符串对我很有帮助。

我对我的 WP 博客永久链接进行了 SEO 重组,我发现虽然裸 URL 重定向正常,但带有参数的 URL 没有重定向,它们会出现 404 错误。我需要 URL 参数,因为我的网站是多语言的(Transposh 插件),所以“lang”参数告诉网站要将内容翻译成什么语言。

我想我可能需要创建一堆 HTACCESS 重定向,将带有语言参数的旧 URL 重定向到这些 URL 的新永久链接,并传递 lang 参数。

这方面的一个例子是:

Source URL: /this-old-postname/?lang=(*)
Destination URL /blog/this-new-postname/?lang=$

无法预测 URL 模式(尽管参数模式是可预测的),因为每个 URL 都经过调整以获得最佳 SEO 贡献。

我希望我需要写很多这些,每个都是独一无二的,所以如果您能够提供一个示例,您能否提供两个重定向,这将适用于以下实际示例?

Source: http://www.travelnasia.com/thailand/bangkok/don-mueang-airport/?lang=zh
Destination: http://www.travelnasia.com/thailand/don-mueang-airport-bangkok/?lang=zh

Source: http://www.travelnasia.com/blog/map-attractions-bangkok-skytrain/?lang=zh
Destination: http://www.travelnasia.com/blog/bangkok-skytrain-bts-mrt-lines/?lang=zh

MOD_REWRITE 已经启用,并且在 HTACCESS 中创建的标准重定向确实有效。我很确定要实现这一点,我需要使用:

RewriteCond %QUERY_STRING ^lang=(.*)$

我了解这可确保从源 URL 读取查询字符串。

我认为这样的重定向规则应该可以工作,但它没有:

RewriteRule ^test-redirect/$ http://test.travelnasia.com/destination/hanoi/hanoi-vietnam-destination-guide/$1 [L,QSA]

我尝试了很多其他组合,但似乎没有一个有效。

提前感谢您提供的任何帮助。

托尼

【问题讨论】:

【参考方案1】:

如果您不介意包含其他查询字符串参数,[QSA](查询字符串追加)是迄今为止您最简单的选择。

如果这是永久更改,请使用 [R=301] 将其设为 301 重定向。

这应该适合您的目的

RewriteEngine on # if not already enabled
RewriteRule ^thailand/bangkok/don-mueang-airport/?$ /thailand/don-mueang-airport-bangkok/ [QSA,R=301]
RewriteRule ^/blog/map-attractions-bangkok-skytrain/?$ /blog/bangkok-skytrain-bts-mrt-lines/ [QSA,R=301]
# ...

【讨论】:

PS:如果你真的有很多这些,考虑将这些重写规则放在 Apache 配置中,而不是 .htaccess。 .htaccess 是动态解释的,几乎没有实际的 Apache 配置快(更改需要重新启动服务器)。

以上是关于htaccess url重定向参数不起作用的主要内容,如果未能解决你的问题,请参考以下文章