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

8ulbf1ek  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(181)

我有一个主域名和一个网站设置在我的cPanel主机,以及一个附加域名与自己的独立网站:* 域名.com* 和 * 插件.com*
由于cPanel配置附加域的方式,附加域的网站可以通过主域访问:

    • addon.domain.com/*
    • 域名.com/addon/*

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

  • 访问 *addon.com/任何文件夹/任何文件。
  • 访问 * addon.domain.com/anyfolder/anyfile.php**or*
  • 访问 * 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),它仍然会工作没有错误,我不知道如何去纠正这与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记录。这当然会导致“找不到服务器”的错误,这将产生预期的影响,但我无法想象这是一个可取的选择。

idfiyjo8

idfiyjo81#

您应该在子域根目录中.htaccess文件顶部附近使用mod_rewrite执行如下操作。
我假设addon.comwww.addon.com都应该是可访问的。
例如:

RewriteEngine On

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

上面的代码将阻止(服务于404 Not Found)任何 * 不是 * addon.com(或www.addon.com)的请求。CondPattern 上的!前缀否定表达式。任何URL路径。
使用4xx范围内的返回代码时,不需要L标志。

替代方法

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

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

这将使用带有mod_authz_core的Apache表达式。
以上将服务于403禁止的任何请求,不是为附加域。
"看看你的规矩"

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标题(您 * 来自 * 的网站),所以这不会得到想要的结果。但是,addon.domain.com/anyfolder/anyfile.php的请求仍然会被此规则阻止。
请注意,.htaccess文件中的指令顺序可能很重要。任何 blocking 指令都应位于配置文件的顶部附近。
另一个仅适用于域的示例:

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子域)--除非该规则被放在错误的位置,并且它与其他规则冲突,如上所述。
请注意,您不一定只需要一个规则。有时,两个或多个规则可以像一个规则一样有效地执行工作。

相关问题