【问题标题】:Rewrite problem with {QUERY_STRING} and Parameter{QUERY_STRING} 和参数的重写问题
【发布时间】:2020-07-31 21:30:25
【问题描述】:

我搜索但没有找到解决我面临的 htaccess 重写问题的方法:

我正在尝试重定向此 URL:

example.com/search.php?clearSearch=true&searchPhrase=keyword

到这个网址:

example.com/topic/pages/search.php?search=keyword

我只想将“关键字”(单词和数字)转移到新的 URL。

我对它进行了许多变体的测试,但没有任何反应:

没有关键字运行的正常 301 重定向

redirectMatch 301 ^/search.php https://www.example.com/topic/pages/search.php?search=

但是这个没有运行:

RewriteEngine On
RewriteCond   %{REQUEST_URI}    ^/index.php$
RewriteCond   %{QUERY_STRING}   ^search.php?clearSearch=true&searchPhrase=([0-9]*)$
RewriteRule   ^(.*)$ https://www.example.com/topic/pages/search.php?search=%1   [R=302,L]

我的重写配置有什么问题?

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting query-string


    【解决方案1】:

    你的想法太复杂了。请考虑这种方法:

    RewriteEngine On
    RewriteCond   %{QUERY_STRING} (?:^|&)searchPhrase=(.*)(?:&|$)
    RewriteRule   ^/?index\.php$ /topic/pages/search.php?search=%1   [R=302,QSD,L]
    

    最好先从 302 临时重定向开始,稍后再将其更改为 301 永久重定向,前提是您确定一切都已正确设置。这样可以防止在尝试时出现缓存问题...

    此实现同样适用于 http 服务器主机配置或分布式配置文件(“.htaccess”文件)。显然重写模块需要在http服务器内部加载并在http主机中启用。如果您使用分布式配置文件,您需要注意它的解释在主机配置中完全启用,并且它位于主机的 DOCUMENT_ROOT 文件夹中。

    一般来说:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用分布式配置文件(“.htaccess”)。这些分布式配置文件增加了复杂性,通常是意外行为的原因,难以调试,而且它们确实减慢了 http 服务器的速度。它们仅在您无法访问真正的 http 服务器主机配置(阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)的情况下作为最后一个选项提供。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多