Windows Server下XAMPP多项目场景中,如何仅允许指定IP访问特定项目并禁止其访问其他项目
Windows Server下XAMPP多项目场景中,如何仅允许指定IP访问特定项目并禁止其访问其他项目
嗨,我来帮你解决这个问题!你已经通过防火墙白名单让供应商能访问你的服务器,但现在需要限制他们只能访问p1项目,不能碰p2、p3这些,而且不想每个项目都加.htaccess对吧?这里有两个更高效的方案,不用逐个项目配置:
方案一:利用根目录的.htaccess统一配置
既然所有项目都在C:/xampp/htdocs/下,咱们可以直接在根目录的.htaccess文件里写规则,一次性搞定权限限制,不用给每个项目单独加配置。
创建或修改C:/xampp/htdocs/.htaccess,添加以下内容(记得替换成供应商实际的IP地址):
# 标记供应商的IP为特殊环境变量 SetEnvIF RemoteAddr "^192\.168\.1\.100$" VENDOR_IP # 允许供应商访问p1目录下的所有内容,同时保留其他用户的访问权限 <Directory "C:/xampp/htdocs/p1"> Require env VENDOR_IP Require all granted </Directory> # 拒绝供应商访问根目录下的其他所有内容,允许正常用户访问 <Directory "C:/xampp/htdocs/"> Require not env VENDOR_IP Require all granted </Directory>
配置说明:
SetEnvIF会把匹配到的供应商IP标记为VENDOR_IP环境变量,方便后续规则引用;- Apache的目录规则会优先匹配最具体的路径,所以
p1的允许规则会覆盖根目录的拒绝规则,供应商能正常访问p1; - 其他项目(
p2、p3)会触发根目录的拒绝规则,供应商访问时会得到403 Forbidden,而正常用户不受影响。
方案二:使用Apache虚拟主机配置(更推荐)
如果你的服务器用的是虚拟主机(从你用域名访问来看应该是),直接修改Apache的虚拟主机配置会比.htaccess更高效(因为.htaccess是每次请求都解析,虚拟主机配置是Apache启动时加载的)。
步骤如下:
- 打开XAMPP控制面板,点击Apache的
Config按钮,选择Apache (httpd.conf); - 找到
#Include conf/extra/httpd-vhosts.conf这一行,去掉前面的#,开启虚拟主机配置; - 打开
C:/xampp/apache/conf/extra/httpd-vhosts.conf,添加以下配置(替换IP和SSL证书路径):
<VirtualHost *:443> ServerName example.com DocumentRoot "C:/xampp/htdocs" # 如果你用的是HTTPS,需要配置SSL证书(根据你的实际证书路径修改) SSLEngine on SSLCertificateFile "C:/xampp/apache/conf/ssl.crt/server.crt" SSLCertificateKeyFile "C:/xampp/apache/conf/ssl.key/server.key" # 允许所有人访问p1项目 <Location "/p1"> Require all granted </Location> # 拒绝供应商IP访问除p1外的所有路径,允许其他用户正常访问 <Location "/"> Require not ip 192.168.1.100 Require all granted </Location> </VirtualHost>
注意事项:
- 如果供应商有多个IP,可以写成
Require not ip 192.168.1.100 192.168.1.101; - 如果你用的是HTTP而不是HTTPS,把
<VirtualHost *:443>改成<VirtualHost *:80>,并去掉SSL相关的配置; - 修改完配置后,一定要重启Apache才能生效;
- 测试时用供应商的IP访问
p2,应该会返回403错误,访问p1则正常。
额外检查
确保Apache的以下模块已经启用(在httpd.conf里找,没有注释掉):
LoadModule setenvif_module modules/mod_setenvif.so(方案一需要)LoadModule authz_core_module modules/mod_authz_core.so(两个方案都需要)
备注:内容来源于stack exchange,提问作者utsav
相关产品推荐
相关产品推荐

