如何创建不适用于子网站的301重定向

时间:2021-08-16 作者:techspecplf

场景:

我正在尝试设置301重定向,以便https://foo.org/events 被重定向到non-WordPress 地点https://bar.org/events.

在我的.htaccess 文件中,我设置了以下内容:

Redirect 301 /events https://bar.org/events/
这非常有效,直到我发现规则是级联到我的子网站,这些子网站有完全独立和不相关的事件页面。换句话说:

  • https://subsite1.foo.org/events -&燃气轮机;已重定向到https://bar.org/events/

  • https://subsite2.foo.org/events -&燃气轮机;已重定向到https://bar.org/events/

[等]

但我不想要这个。同样,这些是完全独立的事件页面,具有独特的内容。

我只想要主站点(https://foo.org/events) 重定向到https://bar.org/events/.

具有的子网站页面/events 在slug中should not 重新使用

请告知!

1 个回复
最合适的回答,由SO网友:MrWhite 整理而成

您需要使用mod\\u rewrite(RewriteRuleRewriteCond) 而不是mod\\u别名Redirect 指令,以检查请求的Host 标题。

例如,在.htaccess 文件,在# BEGIN WordPress 第节(指令的顺序很重要):

RewriteCond %{HTTP_HOST} ^foo\\.org [NC]
RewriteRule ^events$ https://bar.org/events/ [R=301,L]
此操作仅重定向http(s)://foo.org/eventshttps://bar.org/events/ 并忽略任何其他请求的主机,例如subsite1.foo.org. 请注意,在源URL上省略了尾随斜杠(如后面的示例所示),但在目标URL上包含了尾随斜杠。第一个示例省略了源URL和目标URL上的尾部斜杠?

UPDATE: 无论是否有尾部斜杠,重定向都应起作用

在这种情况下,您应该更改RewriteRule 图案读取^events/?$ 为了匹配两者/events/events/ 并重定向到bar.org/events/ 在这两种情况下。换句话说:

RewriteRule ^events/?$ https://bar.org/events/ [R=301,L]
(包括上述RewriteCond 指令同上。)

您需要在测试之前清除浏览器缓存,因为任何错误的301(永久)重定向都将被浏览器缓存。首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。

请注意Redirect 指令是前缀匹配的,因此Redirect 301 /events https://bar.org/events/ 指令还将重定向/events/foo/bar/bazhttps://bar.org/events//foo/bar/baz (请注意错误的双斜杠)。重复上述行为RewriteRule, 但如果没有双斜杠问题,您可以更改RewriteRule 要读取的指令:

RewriteRule ^events(?:/(.*))?$ https://bar.org/events/$1 [R=301,L]
这将重定向/eventsbar.org/events/, /events/bar.org/events//events/<something>bar.org/events/<something>.

相关推荐

Redirect htaccess

我需要帮助重定向我的页面。例如,我有网站https://example.com. 我需要将内容从https://example.com 到https://example.com/blog. 这不是问题,我通过更改主页URL来做到这一点。这很有效。但现在我需要添加来自旧的重定向https://example.com 到https://xmpl.com.我想用。htaccess,但这不起作用。你们能帮帮我吗?以下是我对此的一些尝试,但两者都不起作用。RewriteEngine On RewriteRu