【问题标题】:How to redirect to a URL with a query string?如何使用查询字符串重定向到 URL?
【发布时间】:2015-03-02 23:57:49
【问题描述】:

我看到了有关将带有查询字符串的 URL 重定向到不包含查询字符串的新 URL 的问题。

不幸的是,我必须反向执行此操作,我在 Apache 中重定向的知识并不好,而且我找不到任何有关执行此操作的信息。

所以例如我需要重定向类似的东西:

/新闻/新闻项目

到:

/news?item=news-item

新的 URL 结构显然不是很理想,但这是我无法控制的。

我试过了:

RedirectMatch 301 /news/news-item http://www.example.com/news?item=news-item

但这显然行不通。

据我了解,我需要使用RewriteRule,有人能指出我正确的方向吗?

【问题讨论】:

    标签: .htaccess mod-rewrite redirect url-redirection


    【解决方案1】:

    我的回答可能迟到了,但我会这样做:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^news/(.*) /news?item=$1 [R=301,L]
    </IfModule>
    

    我也会使用RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-d。如果具有指定名称的文件或目录存在,则不会按照下面的重写规则进行。

    【讨论】:

      【解决方案2】:

      经过一番研究,我设法弄清楚了这一点。

      我不确定这是否是“理想”的做法,但从我的角度来看,它似乎运作良好。

      除了使用RedirectRedirectMatch 之外,还可以使用RewriteRule 来实现这一点,例如:

      RewriteRule ^news/?(.*) http://example.com/?posts=list [R=301,L]

      这会将任何请求重定向到 newsnews/x(其中 x 可以是任何东西)到:

      http://example.com/?posts=list

      我应该在最初的问题中更清楚地说明不需要使用旧 URL 的一部分生成查询字符串,如果您需要这样做,我认为您需要研究以下内容:

      How to redirect URLs based on query string?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-03-24
        • 2014-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        相关资源
        最近更新 更多