我们拥有https://example1.com/login
并example2.com/login
托管在同一个 apache 服务器 (2.2.22) 上。我想/login
限制example1.com
.
example1.com/login
--> 404(最好)或 403example2.com/login
--> 登录页面
我试过了
<Location /login>
Order Deny,Allow
Deny from example1.com
Allow from example2.com
</Location>
/login
它同时禁用example1.com
和example2.com
。我可以限制example1.com
吗?
您可以使用 mod_rewrite 来执行此操作,它允许您检查访问站点的主机。在您的服务器配置(或
<Directory>
部分或.htaccess
文件)中尝试以下操作:如果您请求,上述服务将提供 404 Not Found,但如果您请求
example1.com/login
,则不会执行任何操作example2.com/login
(该请求将被允许通过)。CondPattern上的
=
前缀使其成为精确的字典比较,而不是正则表达式,因此无需转义点或使用anchors。RewriteCond
为了提供 403 Forbidden,您可以更改 上的标志
RewriteRule
,例如:我很好奇......这似乎允许所有访问,而不是拒绝它?该
Deny from ...
指令拒绝访问用户example1.com
(通过对远程 IP 地址的反向 DNS 查找),而不是访问example1.com
主机的用户。Deny
or指令都不Allow
应该匹配,所以它应该默认Allow。(?)更新:请注意,
RewriteCond
指令(即条件)适用于RewriteRule
随后的单个指令。继续上面的示例,如果您希望仅阻止几个 URL(例如/login
,/demo
和/test
),example1.com
那么您可以将所有这些组合在RewriteRule
模式中。例如:在这种情况下这是可以的,因为 URL 是有限的,而且都很短。或者,您可以为每个 URL 创建一个条件并使用该
OR
标志。例如:这表明......对于所有的 URL,其中
HTTP_HOST
isexample1.com
和URL 要么是要么,要么/login
然后 提供 404 错误文档。但是,第一个示例(使用模式)会更有效,因为这是首先处理的内容。/demo
/test
RewriteRule