【问题标题】:how to use htaccess redirectmatch with query_string?如何将 htaccess 重定向匹配与 query_string 一起使用?
【发布时间】:2010-04-06 15:02:38
【问题描述】:

我试图将"search.php?q=somethinghere" 重定向到"search/somethinghere/",但我做不到!我正在尝试像这样发送表单“<form action="search/" method="get" name="search">”,但网址转到"search/?q=somethinghere"

RedirectMatch 301 ^/search.php?q=(.*)$ http://domain.com/search/$1/ 这也不起作用。有什么问题?

我不想在 URL 中使用“?q="。

【问题讨论】:

    标签: php .htaccess redirect


    【解决方案1】:

    除非您在上面有拼写错误,否则问题是您正在尝试重定向:

    ^/search.php?q=(.*)$
    

    但您收到的网址是:

    search/?q=somethinghere
    

    (区别在于重定向规则中的 .php)

    您可能想尝试使用以下重定向规则:

    RedirectMatch 301 ^/search?q=(.*)$ http://domain.com/search/$1/
    

    【讨论】:

    • 但是我想删掉"?q="的东西..明白吗?
    • 试试这个:RedirectMatch 301 ^/search/?q=(.*)$ domain.com/search/$1 问题是你正在寻找与你得到的不同的东西。您的请求中没有“.php”,因此您的规则将错过它。
    • 抱歉,我之前评论中的东西好像被吃掉了。我将编辑帖子以包含我建议的建议。
    【解决方案2】:

    在客户端执行此操作会更干净、更快捷。让 Javascript 在表单提交时构造 search/query URL - 这将为您节省额外的请求。

    但是,要通过服务器端重定向来实现,您可以使用 mod_rewriteRewriteCondQUERY_STRING 作为源:

    RewriteCond %{QUERY_STRING}  \bq=([^&]*)$
    RewriteRule ^search.php$ /search/%1 [R=301]
    

    【讨论】:

    • 确保使用 [R=301] 进行正确的重定向,包括更改 URL。我在发布后一分钟编辑了它,所以你可能复制了旧版本。
    • 随着您更新的代码 url 变为:domain.com/search/nero?q=nero "?q=" 仍然在这里 :((
    • 我知道这是一篇旧帖子,但对于任何可能有帮助的人,我认为您需要在 RewriteRule 的末尾添加一个 ? 以清除查询字符串,例如:RewriteRule ^search.php$ /search/%1? [R=301]
    【解决方案3】:

    每当我有 .htaccess 问题时,我总是先看看这个网站:http://corz.org/serv/tricks/htaccess2.php#cooldenial

    该站点提供了许多使用 .htaccess 文件执行不同操作的示例和说明。根据该网站,您可以尝试以下操作:

    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^search/([^/]+) http://domain.com/search.php?q=$1 [NC]
    

    但是,我不是 .htaccess 专家 - 所以你可能需要摆弄它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2016-03-25
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      相关资源
      最近更新 更多