0

我有一个主域和 5 个插件作为独立站点。一切都很好,但是当单击时primary.com/addon1.com,她/他可以通过主网站访问不相关的内容。我想防止这种情况。

我正在通过主要根目录中的 htaccess 寻找解决方案,而不是编辑插件的 5 个 htaccess 文件。

简单地说,我在主 htaccess 中尝试了以下代码,但它不起作用。我尝试了许多其他替代方案,但不起作用。为什么?这有什么问题?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} (.*)primary\.com$
RewriteRule ^/(addon1|addon2|addon3|addon4|addon5)(.*)$ http://primary.com [R=301,L]
</ifModule>
4

1 回答 1

1

文档解释了规则模式应用于请求 URL的RewriteRule哪个部分:相对路径部分,以防您在动态配置文件的上下文中使用规则(您这样做)。

相对路径意味着:没有前导斜杠 ( /),这将是绝对路径。一旦您开始考虑此类动态配置文件的逻辑,这绝对有意义。

因此,您可以从模式中删除前导斜杠,但我认为将其设为可选是一种更好的做法。这样,无论在动态配置文件中还是在真实主机配置中,您的规则都将起作用:

RewriteEngine On
RewriteCond %{HTTP_HOST} (^|\.)primary\.com$
RewriteRule ^/?(addon1\.com|addon2\.com)(/|$) http://primary.com/ [R=301]

和一般性评论:您应该始终更喜欢将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些动态配置文件增加了复杂性,通常是意外行为的原因,难以调试,它们确实减慢了 http 服务器的速度,通常是徒劳的,它们可以打开通往安全噩梦的途径。它们仅适用于您无法访问真正的 http 服务器主机配置的情况(阅读:真正便宜的服务提供商)。

于 2018-05-25T16:08:09.623 回答