如何使用查询字符串重定向到 URL?

How to redirect to a URL with a query string?

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

不幸的是,我必须反向执行此操作,我对 Apache 中的重定向了解不多,而且我找不到有关执行此操作的任何信息。

因此,例如我需要重定向如下内容:

/news/news-item

至:

/news?item=新闻项目

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

我试过:

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

但显然这行不通。

据我所知,我需要使用 RewriteRule,有人可以指出正确的方向吗?

经过一番研究,我设法解决了这个问题。

我不确定这是否是 'ideal' 执行此操作的方法,但从我的角度来看它似乎工作得很好。

不是使用 RedirectMatchRedirect 而是可以使用 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?

我的回答可能来晚了,但我会这样做:

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

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