我有一个主域名和一个网站设置在我的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记录。这当然会导致“找不到服务器”的错误,这将产生预期的影响,但我无法想象这是一个可取的选择。
1条答案
按热度按时间idfiyjo81#
您应该在子域根目录中
.htaccess
文件顶部附近使用mod_rewrite执行如下操作。我假设
addon.com
和www.addon.com
都应该是可访问的。例如:
上面的代码将阻止(服务于404 Not Found)任何 * 不是 *
addon.com
(或www.addon.com
)的请求。CondPattern 上的!
前缀否定表达式。任何URL路径。使用4xx范围内的返回代码时,不需要
L
标志。替代方法
另一种方法不使用mod_rewrite,因此不一定会被子目录中的
.htaccess
文件覆盖:这将使用带有mod_authz_core的Apache表达式。
以上将服务于403禁止的任何请求,不是为附加域。
"看看你的规矩"
RedirectMatch
是mod_alias指令。它与初始化mod_rewrite的RewriteEngine
指令无关。这会使
addon.domain.com
显示所需的404错误,但addon.domain.com/anyfolder/anyfile.php
仍然可以正常工作。这是检查
Referer
标题(您 * 来自 * 的网站),所以这不会得到想要的结果。但是,addon.domain.com/anyfolder/anyfile.php
的请求仍然会被此规则阻止。请注意,
.htaccess
文件中的指令顺序可能很重要。任何 blocking 指令都应位于配置文件的顶部附近。另一个仅适用于域的示例:
同样,这会导致
addon.domain.com
显示所需的404错误,但addon.domain.com/anyfolder/anyfile.php
仍能正常工作。这应该阻止
addon.domain.com/anyfolder/anyfile.php
(有或没有www子域)--除非该规则被放在错误的位置,并且它与其他规则冲突,如上所述。请注意,您不一定只需要一个规则。有时,两个或多个规则可以像一个规则一样有效地执行工作。