【发布时间】:2020-01-31 17:42:12
【问题描述】:
我在 Apache 服务器上设置了 WordPress 多站点。出于 SEO 的原因,我试图将尽可能多的 JS 重定向转移到 .htaccess 文件中的 HTTP 301。由于此多站点上的域被屏蔽,所有这些域共享一个顶级目录和一个 .htaccess 文件。因此,我无法使每个重定向都变得简单
Redirect 301 /example/ https://example.com/example/
例如,如果我们有一项服务关闭了德克萨斯州奥斯汀的一个位置,而另一项服务仍然在德克萨斯州奥斯汀打开了一个服务,并且两个 URL 都设置为“example.com/austin/”,我不能有一个包罗万象的重定向,将“/austin/”发送到一个地方。这会产生大量潜在冲突。
所以我正在尝试创建仅在使用特定屏蔽域时才生效的重定向。下面是我正在使用的代码,但它不起作用,请注意我确保包含尾随斜杠和非尾随斜杠:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [nc]
RewriteRule ^old1$ https://example.com/new1/ [R=301,NC,L]
RewriteRule ^old1/$ https://example.com/new1/ [R=301,NC,L]
RewriteRule ^old12$ https://example.com/new12/ [R=301,NC,L]
RewriteRule ^old12/$ https://example.com/new12/ [R=301,NC,L]
#...
怎么了?
【问题讨论】:
-
一个 RewriteCond 只影响下一个 RewriteRule,而不影响多个。
-
“尾部斜杠和非尾部斜杠都被覆盖” – 不需要两个规则,您可以使用
?使尾部斜杠可选量词就可以了。^foo/?$ -
@04FS 我更新了这些看起来像 RewriteEngine On RewriteCond %{HTTP_HOST} ^example.com [nc] RewriteRule ^old1/?$ example.com/new1 [R=301,NC,L] RewriteCond % {HTTP_HOST} ^example.com [nc] RewriteRule ^old12/?$ example.com/new12 [R=301,NC,L] 很遗憾,它们仍然无法正常工作。
-
@04FS 我能够解决这个问题。这 /?提示很棒,但根本问题是另一个重写规则,高于所有这些规则,它强制使用斜杠。我所要做的就是将它移到所有重定向规则的底部,它就成功了。 RewriteCond 实际上确实涵盖了多个 RewriteRule,所以我认为这不是问题。谢谢!
-
@04FS 不,你对唯一的 RewriteRule 事情是 100% 正确的。发现这一点很困难。
标签: apache .htaccess redirect url-rewriting multisite