![](/img/trans.png)
[英]Block access to all but a single URI with htaccess from a subdomain
[英]Using htaccess to block access to a subdomain and all files and folders under that subdomain
我在我的 cPanel 主机上有一个主域和一个网站设置,还有一个带有自己独立网站的附加域: domain.com和addon.com
由于 cPanel 配置附加域的方式,可以通过主域访问附加域的网站:
addon.domain.com/
domain.com/addon/
我想做的是阻止主域对附加域网站的所有访问,包括其中包含的任何和所有文件或文件夹,因此:
我在修改附加域的 .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.com
和www.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.