【问题标题】:Preventing primary domain from showing addon domains' content as its subfolder防止主域将插件域的内容显示为其子文件夹
【发布时间】:2018-05-25 09:34:07
【问题描述】:

我有一个主域和 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>

【问题讨论】:

  • 请阅读您使用的工具的文档。 RewriteRule 命令作用于 path,而不是 url。因此,如果您的模式以“域名”开头,它将永远不会匹配。
  • @arkascha 我改成了一条路径,但还是不行。我把问题编辑成你说的那样。

标签: .htaccess addon-domain


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 感谢您的回答。 1-关于您的评论,我目前使用的是共享主机,并且主机提供商不允许我使用httpd.conf。
  • 2- 您的代码解决了 2 个插件,但它也导致所有直接“addon.com”点击转到 primary.com,所以我还添加了 'RewriteCond %{HTTP_HOST} (.*)主要\.com$ '.
  • 3-关于其他3个插件,他们也有自己的.htaccess,但他们只有'code'RewriteRule ^(js|css)..'code',我红色[文档] [1] 所以我希望它们是独立的并且都按顺序工作,为什么它会覆盖根级别.htaccess 中的独立 RewriteRule? [1]:httpd.apache.org/docs/2.2/howto/htaccess.html
  • 好的,我在答案中添加了您对RewriteCond 的建议,其形式略有改动。很大的进步,我没想到。
  • 关于您的评论 3.:我不太明白问题出在哪里。当然,所有相关的动态配置文件都被考虑在内,从DOCUMENT_ROOT文件夹迭代到匹配请求路径的文件夹。这就是此类文件减慢 http 服务器速度的原因之一……规则按照它们发生的顺序应用。后面的规则肯定不会“覆盖”早期的规则。但请记住,如果您访问 http://addon1.com/css/file.css,则 not 会考虑到 plevel .htaccess 文件(您的),因为它在该主机 @987654330 中是 not @.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 2013-05-17
  • 1970-01-01
  • 2012-11-18
  • 2013-04-06
  • 2017-08-24
  • 1970-01-01
相关资源
最近更新 更多