Apache 将旧搜索重定向到新搜索并保留第一个参数

Apache 将旧搜索重定向到新搜索并保留第一个参数,apache,.htaccess,redirect,mod-rewrite,url-rewriting,Apache,.htaccess,Redirect,Mod Rewrite,Url Rewriting,我有一个网站,当有人搜索任何东西时,实际上有这个URL /search?searchword=KEYWORD&searchphrase=all 我想把它重定向到新的: /newsearch?q=KEYWORD 基本上,保留关键字参数并重写URL 我尝试了RewriteRule^search?searchword(.*)$/newsearch?q=$1[L,QSA]但它不起作用,什么也没发生 谢谢。请仅根据您展示的样品,尝试以下内容。您需要将searchword=之后和&之前的字符串捕

我有一个网站,当有人搜索任何东西时,实际上有这个URL

/search?searchword=KEYWORD&searchphrase=all
我想把它重定向到新的:

/newsearch?q=KEYWORD
基本上,保留关键字参数并重写URL

我尝试了
RewriteRule^search?searchword(.*)$/newsearch?q=$1[L,QSA]
但它不起作用,什么也没发生


谢谢。

请仅根据您展示的样品,尝试以下内容。您需要将
searchword=
之后和
&
之前的字符串捕获到back引用(临时内存)中,以便在重写url时获取它

RewriteEngine ON
RewriteCond %{THE_REQUEST} \s/search\?searchword=([^&]*)&searchphrase=all[^\s&]*\s [NC]
RewriteCond %{REQUEST_URI} !^/newsearch [NC]
RewriteRule ^(.*)$ /newsearch?q=%1 [NC,L]
当我用
curl
命令检查这一点时,如果这是重写正确与否,并且看起来很好

curl -IL "http://localhost:80/search?searchword=KEYWORD&searchphrase=all"
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1g PHP/7.4.11
Location: http://localhost/newsearch?q=KEYWORD
Content-Type: text/html; charset=iso-8859-1

您的规则不起作用,因为您正在使用
RewriteRule
指令测试querystring。您需要匹配@RavinderSingh13在回答中提到的
%{QUERY\u STRING}
%{THE\u REQUEST}

RewriteEngine on

RewriteCond %{QUERY_STRING} ^searchword=([^&]+)&searchphrase=.+$ [NC]
RewriteRule ^search/?$ /newsearch?q=%1 [L,R]

我尝试了新的一个,但错误为500:“由于可能的配置错误,请求超过了10个内部重定向的限制。”在Apache Error.log中:(@ac_s_\fer,请您尝试一下我的编辑规则并告诉我,请确保在测试之前清除浏览器的缓存,请告诉我它是如何运行的。谢谢,但同样的错误:(仅当我访问
search?searchword=keyword&searchphrase=all
时才会发生,但如果有帮助,则不会发生。对于最后一个,没有错误,但也没有重定向。在多次尝试之间清除所有缓存。
curl-IL”https://localhost/search?searchword=KEYWORD&searchphrase=all"HTTP/2500与curl-IL的比较https://localhost/search?searchword=KEYWORD“HTTP/2200
我对此仍有问题。此查询
/search?searchword=two%20words&searchphrase=all
正在重定向到
/newsearch?q=two%2520words
(请注意额外的
%2520
)。谢谢。我用
重写规则^search/?$/newsearch?q=%1[NE,L,R]
修复了它(无转义)