如何重定向到带有查询字符串的URL?

时间:2015-01-05 12:35:22

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

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

不幸的是我必须反过来这样做,我在Apache中重定向的知识并不好,我找不到任何关于这样做的信息。

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

/新闻/新闻项

为:

/消息?项目=新闻项

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

我试过了:

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

但显然这不起作用。

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

2 个答案:

答案 0 :(得分:2)

我的答案可能要迟到了,但我就是这样做的:

<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。如果存在具有指定名称的文件或目录,则不会使用下面的重写规则。

答案 1 :(得分:0)

经过一番研究后,我设法弄明白了。

我不确定这是否是理想的&#39;这样做的方式,但从我的角度来看似乎运作良好。

使用Redirect可以实现此目的,而不是使用RedirectMatch RewriteRule,例如:

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

这会将任何请求重定向到newsnews/x(其中x可能是任何内容):

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

我应该在最初的问题中更清楚地说明查询字符串不需要使用旧网址的一部分生成,如果你需要这样做我认为你需要调查一下像这样的东西:

How to redirect URLs based on query string?