gpt4 book ai didi

apache - 重写规则以将旧搜索转发到新搜索

转载 作者:行者123 更新时间:2023-12-04 19:43:17 24 4
gpt4 key购买 nike

我已经搜索了几个小时,但我无法找到解决方案。
我刚刚建立了一个新网站,其搜索 url 与旧网站不同。我正在 try catch 指向旧站点的搜索查询并将它们发送到新站点搜索。
如:
advanced_search_result.php?search_in_description=1&keywords=alternator

重定向到新站点搜索,例如:
index.php?route=product/search&search=alternator

我已经尝试了以下变体,但没有任何运气。

RewriteRule ^advanced_search_result\.php?.*keywords=(.*)$ index.php?route=product/search&search=$1 [R=301,L]

任何帮助,将不胜感激。

最佳答案

您的问题是您正在尝试映射一个模式,其中包括 RewriteRule 无法实现的查询字符串。 .这是清楚地记录在案的。您需要使用 RewriteCond为了那个原因:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^(?:[^&]*&)*keywords=([^\&]*)
RewriteRule ^/?advanced_search_result\.php$ /index.php?route=product/search&search=%1 [R=301,L]

原因是在 RewriteRule该模式仅与请求 URL 的路径组件匹配。查询字符串不是其中的一部分。只能在 RewriteCond 中匹配查询字符串使用 %{QUERY_STRING}变量,因为这样的条件可以针对某种模式测试任意字符串,而不仅仅是 URL 的路径部分。然后可以通过 %1 引用在这种条件内捕获的标记。在以下 RewriteRule ,而不是 $1它指的是该规则本身的捕获。

详情在 official documentation of the rewriting module 中解释。在重写或重定向规则时,您应该始终引用这一点。它写得很好,并带有很好的例子。

还有一个一般提示:您应该始终喜欢将此类规则放在 http 服务器(虚拟)主机配置中,而不是使用动态配置文件( .htaccess 样式文件)。众所周知,这些文件容易出错,难以调试,而且它们确实会降低服务器的速度。它们仅在您无法控制主机配置(阅读:非常便宜的托管服务提供商)或您有一个依赖于编写自己的重写规则的应用程序(这显然是安全噩梦)的情况下作为最后一个选项被支持)。

关于apache - 重写规则以将旧搜索转发到新搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45098366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com