重定向时如何排除源 URL 上的尾部斜杠?

How to exclude trailing slash on source URL when redirecting?

我必须进行从一个域到另一个域的 301 重定向(example-a.comexample-b.com)。

这是我在 example-a.com.htaccess 中输入的代码:

RewriteEngine on 
RewriteRule ^(.*)$ https://www.example-b.com/ [R=301,L]

所有 URL 都是相同的,除了 example-a.com 的页面在 URL 的末尾都有一个 /(斜线),但是 example-b.com 没有。那么如果 URL 包含一个,如何在没有结尾 / 的情况下重定向?

RewriteRule ^(.*)$ https://www.example-b.com/ [R=301,L]

要从重定向的 URL 中排除斜杠,然后从 RewriteRule 模式 中捕获的组中排除斜杠。例如。 ^(.*)/$.

但是,假设您还希望文档根目录重定向,其中 URL-path 中没有斜杠,那么您需要将尾部斜杠设为可选(或创建一个完全独立的规则)。但在那种情况下,您还需要制作捕获组 non-greedy,否则尾部斜杠将始终包含在捕获组中(因为正则表达式是 greedy 默认)。

因此,请尝试以下操作:

RewriteRule ^(.*?)/?$ https://www.example-b.com/ [R=302,L]

您需要在测试前清除浏览器缓存。由于较早的 301 可能已被缓存。

请注意,这是一个 302(临时)重定向。只有将其更改为 301(永久)重定向 - 如果这是意图 - 一旦您确认它可以正常工作。这是为了避免浏览器在测试时缓存错误的重定向。