如何使用查询字符串重定向到 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' 执行此操作的方法,但从我的角度来看它似乎工作得很好。
不是使用 RedirectMatch
的 Redirect
而是可以使用 RewriteRule
来实现这一点,例如:
RewriteRule ^news/?(.*) http://example.com/?posts=list [R=301,L]
这会将任何请求重定向到 news
或 news/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} !-f
和 RewriteCond %{REQUEST_FILENAME} !-d
。如果存在具有指定名称的文件或目录,则不会执行以下重写规则。
我看到有关将带有查询字符串的 URL 重定向到不包含查询字符串的新 URL 的问题。
不幸的是,我必须反向执行此操作,我对 Apache 中的重定向了解不多,而且我找不到有关执行此操作的任何信息。
因此,例如我需要重定向如下内容:
/news/news-item
至:
/news?item=新闻项目
新的URL结构显然不理想,但这是我无法控制的。
我试过:
RedirectMatch 301 /news/news-item http://www.example.com/news?item=news-item
但显然这行不通。
据我所知,我需要使用 RewriteRule
,有人可以指出正确的方向吗?
经过一番研究,我设法解决了这个问题。
我不确定这是否是 'ideal' 执行此操作的方法,但从我的角度来看它似乎工作得很好。
不是使用 RedirectMatch
的 Redirect
而是可以使用 RewriteRule
来实现这一点,例如:
RewriteRule ^news/?(.*) http://example.com/?posts=list [R=301,L]
这会将任何请求重定向到 news
或 news/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} !-f
和 RewriteCond %{REQUEST_FILENAME} !-d
。如果存在具有指定名称的文件或目录,则不会执行以下重写规则。