htaccess 将单个页面重定向到不带参数的不同域

htaccess Redirect Single Page to Different Domain without Parameters

我有一个包含以下 htaccess 文件的站点:

RewriteCond %{THE_REQUEST} \s/+(.+?)\index.html/?[\s?] [NC]
RewriteRule ^ /%1 [R=302,NE,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?uri= [NC,L,QSA]

我需要将两个页面重定向到不同的域。目前,我将它们设置为使用以下行的 302 重定向:

Redirect 302 /some-url-slug https://example.com/some-new-url-slug

这确实可以重定向到新域,但问题是它将 uri 参数添加到重定向的 url 所以我得到类似的东西:

https://example.com/some-new-url-slug?uri=some-url-slug

我认为将其添加到重写规则上方会解决问题,但事实并非如此。我怎样才能忽略该规则,但只针对 2 个特定页面?

I thought adding it above the rewrite rule would solve it

Redirect指令属于mod_alias,其他指令为mod_rewrite。无论您将 Redirect 指令放在哪里,它总是会在 mod_rewrite 之后被处理。 Redirect 指令将保留查询字符串。

对于这两个特定的重定向,您需要在文件顶部使用 mod_rewrite RewriteRule。例如:

RewriteRule ^some-url-slug$ https://example.com/some-new-url-slug [QSD,R=302,L]

注意RewriteRule指令匹配的URL-path不是以斜杠开头的。 QSD(查询字符串丢弃)标志确保丢弃初始请求中可能存在的任何查询字符串(否则默认情况下通过)。

更新:

I just realized that adding a trailing / to the url loads the original page. Do I need to create a seperate redirect rule for links that have the trailing slash?

您可以将其包含在同一规则中,并通过在模式末尾添加 /? 使尾部斜杠可选。例如:

RewriteRule ^some-url-slug/?$ https://example.com/some-new-url-slug [QSD,R=302,L]

这现在匹配 some-url-slug some-url-slug/ 并像以前一样重定向到 URL。