使用多个查询重定向

Posted

技术标签:

【中文标题】使用多个查询重定向【英文标题】:redirect with multiple query 【发布时间】:2017-05-01 03:14:08 【问题描述】:

我已经搜索了几个小时,但找不到解决此问题的有效解决方案。我正在重新设计一个网站,需要将一堆旧网址重定向到新网址。基本格式类似于:pages/page.php?m=22&p=33应该转到mainpage/subpage/ 之类的东西,同时完全忽略所有参数。在尝试了多种变体之后,我目前在我的 htaccess 中有这个(作为 Wordpress 网站的一部分)。当 url 中有 2 个参数进行重定向而不是 1 或无时,就会出现问题。

# REDIRECTS FROM OLD WEBSITE
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
# custom redirects
Options +FollowSymLinks -MultiViews
RewriteCond %QUERY_STRING ^m=([0-9]+)&p=([0-9]+)$ [nc]
RewriteRule ^pages/all_inclusive_zeildag\.php$ /bedrijfsuitjes/volledig\-verzorgd\-zeilen/ [R=301,NC,L]
</IfModule>
# END REDIRECTS OLD WEBSITE

# BEGIN WordPress
all the usual wp code
#
# END WordPress

我几乎已经完成了这项工作。问题是第二个参数。正确重定向的是: pages/all_inclusive_zeildag.php?m=8 如果我在没有任何参数的情况下重定向。

但问题是:/pages/all_inclusive_zeildag.php?m=8&p=22 导致 404

欢迎任何见解。

谢谢, 约翰

【问题讨论】:

【参考方案1】:

正如预期的那样,此重写没有选择前两个。

第三个实际上正在做你要求它做的事情:

http://57755478.swh.strato-hosting.eu/pages/all_inclusive_zeildag.php?m=8&p=22

导致 301 指向: http://57755478.swh.strato-hosting.eu/bedrijfsuitjes/volledig-verzorgd-zeilen/?m=8&p=22

(使用 devtools 网络选项卡,如果您使用的是 chrome,请打开保留日志)

如果您打算剥离查询字符串,那么您需要在重定向 url 中附加一个问号:

重写规则 ^pages/all_inclusive_zeildag.php$ /bedrijfsuitjes/volledig-verzorgd-zeilen/? [R=301,NC,L]

同样为了清楚起见,将 RewriteCond 语句与重写规则组合在一起,因为它们仅适用于它们之后的第一个 RewriteRule。

祝你好运!

【讨论】:

【参考方案2】:

在处理重写规则时查看发生了什么的“不错”方法是使用Apache 2.2 mod_rewrite 中的RewriteLog 和RewriteLogLevel 指令:

RewriteEngine On
RewriteLog /var/log/httpd/rewrite.log
RewriteLogLevel 3

或者在Apache 2.4 mod_rewrite 中使用常规的LogLevel 指令:

LogLevel alert rewrite:trace3

另请参阅:https://wiki.apache.org/httpd/RewriteLog、https://***.com/a/9632952/832620

【讨论】:

【参考方案3】:

好的。感谢所有的投入。不知何故,它让我走上了正轨,我最终得到了

重写引擎开启 #RewriteCond %SCRIPT_FILENAME !-f RewriteRule ^pages/all_inclusive_zeildag\.php /bedrijfsuitjes/volledig-verzorgd-zeilen/%1? [L,R=301,NC] RewriteRule ^pages/avondopleiding\.php /leren-zeilen/avondles-zeilen/%1? [L,R=301,NC]

【讨论】:

以上是关于使用多个查询重定向的主要内容,如果未能解决你的问题,请参考以下文章

使用查询参数和 URL 中的 ~ 进行 301 重定向

浏览器如何使用查询字符串缓存 301 重定向

javascript 请求多个外部重定向 - 联系表单7重定向

302重定向 - 拦截重定向响应和查询字符串

nginx.conf 重定向多个条件

WordPress 重定向插件,用于在目标 URL 中包含查询参数