重定向 url 保留其查询并添加固定查询

Redirect an url keeping its queries and adding a fixed one

我正在尝试从 url 重定向到另一个 url 但保留查询。 例如,来自

/oldurl?query1=yes&query2=yes&... (or any list of queries)

/newurl?fixedquery=yes&query1=yes&query2=yes&...

所以在实践中它会将旧的 url 及其查询重定向到新的 url,保留旧的查询,加上一个固定的查询。

这是我一直试图在 .htaccess 中使用(未成功)的内容:

RedirectMatch 301 /oldurl/?$ newurl/?fixedquery=yes&

我之前也试过用Rewrite

RewriteCond %{QUERY_STRING}  ^fixedquery=yes$
RewriteRule ^oldurl/?$ newurl/? [R=301,L]

但这只是重定向 if for /oldurl(添加 fixedquery)并给出 404,以防我将查询传递给 oldurl(例如 /oldurl?var1=1)。

我哪里错了?

您需要使用 mod_rewrite 来操作查询字符串。请尝试以下操作:

RewriteRule ^oldurl/?$ /newurl?fixedquery=yes [QSA,R=301,L]

您的示例 URL 省略了目标 URL 上的尾部斜线,所以我在这里省略了它。但是,在您的指令中,您是否包含它?

QSA 标记 appends/merges 来自请求的原始查询字符串。所以结果 URL 是 /newurl?fixedquery=yes&query1=yes&query2=yes&...,其中 query1=yes&query2=yes&... 是在初始请求中传递的。

更新: 请注意,此规则需要靠近文件顶部, 任何现有重写之前。 .htaccess 文件中指令的顺序可能很重要。首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。并且您需要确保在测试之前清除浏览器缓存。


看看你的尝试...

RedirectMatch 301 /oldurl/?$ newurl/?fixedquery=yes&

RedirectMatch (mod_alias) 指令仅匹配 URL-path,但正则表达式中没有捕获子组,因此 </code> 反向引用始终为空.</p> <blockquote> <pre><code>RewriteCond %{QUERY_STRING} ^fixedquery=yes$ RewriteRule ^oldurl/?$ newurl/? [R=301,L]

匹配 /oldurl?fixedquery=yes 的请求并重定向到 newurl/ - 完全删除查询字符串。然而,这也依赖于 RewriteBase 的设置,否则这将导致格式错误的重定向,暴露您的目录结构。