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 不起作用,需要其他解决方案
Codeigniter Htaccess 和 URL 重定向问题