重定向时如何排除源 URL 上的尾部斜杠?
How to exclude trailing slash on source URL when redirecting?
我必须进行从一个域到另一个域的 301 重定向(example-a.com
到 example-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(永久)重定向 - 如果这是意图 - 一旦您确认它可以正常工作。这是为了避免浏览器在测试时缓存错误的重定向。
我必须进行从一个域到另一个域的 301 重定向(example-a.com
到 example-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(永久)重定向 - 如果这是意图 - 一旦您确认它可以正常工作。这是为了避免浏览器在测试时缓存错误的重定向。