繁体   English   中英

使用 .htaccess 阻止访问子域以及该子域下的所有文件和文件夹

[英]Using htaccess to block access to a subdomain and all files and folders under that subdomain

我在我的 cPanel 主机上有一个主域和一个网站设置,还有一个带有自己独立网站的附加域: domain.comaddon.com

由于 cPanel 配置附加域的方式,可以通过主域访问附加域的网站:

  • addon.domain.com/

  • domain.com/addon/

我想做的是阻止主域对附加域网站的所有访问,包括其中包含的任何和所有文件或文件夹,因此:

  • 访问addon.com/anyfolder/anyfile.php有效,但是;
  • 访问addon.domain.com/anyfolder/anyfile.php
  • 访问domain.com/addon/anyfolder/anyfile.php失败并出现 404 错误。

我在修改附加域的 .htaccess 文件以实现此目的方面取得了一些成功,例如在附加域的 .htaccess 中使用它:

RewriteEngine on
RedirectMatch 404 ^/addon/(.*)$

完美拦截domain.com/addon/anyfolder/anyfile.php ,显示404错误。

但是我已经尝试了各种方法来为addon.domain.com做同样的事情,虽然我通常可以让它在仅访问域时显示 404,对于任何文件夹或文件( addon.domain.com/anyfolder/anyfile.php ) 它仍然可以正常工作,我不知道如何 go 使用 .htaccess 更正此问题。

例如:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^https?://(www\.)addon\.com
RewriteRule ^(.*)$ - [L,R=404]

这使得addon.domain.com显示所需的 404 错误,但addon.domain.com/anyfolder/anyfile.php仍然可以正常工作。

这当然只是一个例子,我实际上已经搜索了一段时间并尝试了几种不同的重写条件,但没有成功获得所需的结果。 另一个仅适用于域的示例:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?addon.domain.co.uk$ [NC]
RewriteRule ^(.*)$ - [L,R=404]

这再次导致addon.domain.com显示所需的 404 错误,但addon.domain.com/anyfolder/anyfile.php仍然有效。

我唯一能想到的另一件事是编辑主域的 DNS 区域并删除(或以某种方式破坏)子域的 A 记录。 这当然会导致“找不到服务器”错误,这会产生预期的影响,但我无法想象这是一个明智的选择。

您应该使用子域根目录中.htaccess文件顶部附近的 mod_rewrite 执行类似以下操作。

我假设addon.comwww.addon.com都应该可以访问。

例如:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^(www\.)?addon\.com$
RewriteRule ^ - [R=404]

对于不是针对addon.com (或www.addon.com )的任何请求,以上内容将阻止(提供 404 Not Found)。 ! CondPattern上的前缀否定表达式。 任何 URL 路径。

使用 4xx 范围内的返回码时不需要L标志。


替代方法

一种不使用 mod_rewrite 的替代方法,因此不一定会被子目录中的.htaccess文件覆盖:

<If "%{HTTP_HOST} !~ /^(www\.)?addon\.com$/">
    Require all denied
</If>

这使用带有 mod_authz_core 的 Apache 表达式。

以上将为任何不是针对插件域的请求提供 403 Forbidden。


看看你的规则...

 RewriteEngine on RedirectMatch 404 ^/addon/(.*)$

RedirectMatch是一个 mod_alias 指令。 这与初始化 mod_rewrite 的RewriteEngine指令无关。

 RewriteCond %{HTTP_REFERER}?^https:.//(www\.)addon\.com RewriteRule ^(,*)$ - [L,R=404]

这使得addon.domain.com显示所需的 404 错误,但addon.domain.com/anyfolder/anyfile.php仍然可以正常工作。

这是在检查Referer header(您来自的站点),因此不会有预期的结果。 但是,对addon.domain.com/anyfolder/anyfile.php的请求仍应被此规则阻止。

请注意, .htaccess文件中指令的顺序可能很重要。 任何阻塞指令都应该靠近配置文件的顶部。

另一个仅适用于域的示例:

 RewriteEngine on RewriteCond %{HTTP_HOST} ^(www.)?addon.domain.com$ [NC] RewriteRule ^(.*)$ - [L,R=404]

这再次导致addon.domain.com显示所需的 404 错误,但addon.domain.com/anyfolder/anyfile.php仍然有效。

这应该阻止addon.domain.com/anyfolder/anyfile.php (有或没有 www 子域)- 除非规则放在错误的位置并且与其他规则冲突,如上所述。

请注意,您不一定需要只有一个规则。 两个或多个规则有时可以像一个规则一样有效地执行工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM