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重定向参数不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 301 从原始 url 重定向到 .htaccess 中对 SEO 友好的 url 不起作用,需要其他解决方案

使用查询 .htaccess 重定向单个 url

为啥我的 .htaccess 301 重定向规则不起作用?

Codeigniter Htaccess 和 URL 重定向问题

htaccess 重定向到 https 和 www 不起作用

htaccess 重定向 + 在 url 中隐藏子文件夹