首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重写规则将旧搜索转发到新搜索

重写规则将旧搜索转发到新搜索
EN

Stack Overflow用户
提问于 2017-07-14 08:35:15
回答 1查看 52关注 0票数 0

我已经找了几个小时了,但我想不出解决办法。我刚刚张贴了一个新的网站,有一个不同的搜索网址与旧网站。我试图捕获针对旧站点的搜索查询,并将它们发送到新站点搜索。例如: advanced_search_result.php?search_in_description=1&keywords=alternator

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

我试过以下几种没有任何运气的变体。

代码语言:javascript
运行
复制
RewriteRule ^advanced_search_result\.php?.*keywords=(.*)$ index.php?route=product/search&search=$1 [R=301,L]

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-14 09:05:24

您的问题是,您正在试图映射一个模式,其中包括查询字符串,这在RewriteRule中是不可能的。这是很清楚的记录。为此,您需要使用RewriteCond

代码语言:javascript
运行
复制
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

详细信息将在重写模块的正式文件中解释,在重写或重定向规则时,您应该始终参考这些细节。它写得很好,有很好的例子。

还有一个一般性提示:您应该总是倾向于将这样的规则放置在http服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess样式文件)。众所周知,这些文件容易出错,很难调试,而且它们确实减慢了服务器的速度。只有当您无法控制主机配置(请阅读:真正便宜的主机服务提供商)或应用程序依赖于编写自己的重写规则(这显然是一场安全噩梦)时,它们才会被支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45098366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档