【问题标题】:Redirect old search to new one and keep first param将旧搜索重定向到新搜索并保留第一个参数
【发布时间】:2020-12-16 13:52:12
【问题描述】:

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

/search?searchword=KEYWORD&searchphrase=all

我想将它重定向到新的:

/newsearch?q=KEYWORD

基本上,保留 KEYWORD 参数并重写 URL

我尝试了RewriteRule ^search?searchword(.*)$ /newsearch?q=$1 [L,QSA],但它不起作用,没有任何反应。

谢谢。

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite url-rewriting


    【解决方案1】:

    您的规则不起作用,因为您使用RewriteRule 指令来测试查询字符串。您需要匹配@RavinderSingh13 的答案中提到的%{QUERY_STRING}%{THE_REQUEST}

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

    【讨论】:

    • 我还是有这个问题。此查询/search?searchword=two%20words&searchphrase=all 被重定向到/newsearch?q=two%2520words(请注意额外的%2520 而不是%20)。谢谢。
    • 我用RewriteRule ^search/?$ /newsearch?q=%1 [NE,L,R] (No Escape) 修复了它
    【解决方案2】:

    您能否尝试以下操作,仅基于您显示的示例。您需要在 searchword= 之后和 & 之前将字符串捕获到反向引用(临时内存)中,以便在重写 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
    

    【讨论】:

    • 我尝试了新的,但出现错误 500:“由于可能的配置错误,请求超出了 10 个内部重定向的限制。”在 Apache error.log :(
    • @ac_s_fer,您能否尝试一下我的编辑规则并告诉我,请确保在测试之前清除浏览器的缓存,请告诉我情况如何。
    • 谢谢,但同样的错误:(仅当我访问search?searchword=keyword&searchphrase=all时才会出现,但如果我访问search?searchword=keyword'如果有帮助,则不会出现。最后一个,没有错误,但也没有重定向。所有缓存在几次尝试之间清除。
    • curl -IL "https://localhost/search?searchword=KEYWORD&searchphrase=all" HTTP/2 500curl -IL "https://localhost/search?searchword=KEYWORD" HTTP/2 200
    猜你喜欢
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多