macos - Apache:如何根据用户本地或外部网络设置不同的根文件夹
问题描述
我有一个/Users/username/Sites/
用于在本地测试站点的根目录。我只想将其中一个子文件夹公开Users/username/Sites/subsite
给来自网络外部的请求。
我已经设置了端口转发,并且在从动态 DNS 服务登录时能够看到根目录。
我必须对 Apache 做些什么才能完成这项工作?我已经尝试了几次搜索,但我似乎无法找到正确的措辞来回答我的问题。
解决方案
您可以在服务器配置中创建(或修改)a <VirtualHost>
,该配置接受对直接指向的“dynamic-dns-hostname.example”的请求Users/username/Sites/subsite
。
例如,最低限度是(从现有的 vHost 复制配置):
<VirtualHost *:80>
ServerName dynamic-dns-hostname.example
DocumentRoot Users/username/Sites/subsite
<Directory Users/username/Sites/subsite>
Options FollowSymLinks
Require all granted
AllowOverride All
</Directory>
</VirtualHost>
这有效地向用户隐藏了/subsite
目录的名称,因为请求http://dynamic-dns-hostname.example/
直接指向子目录。
这只是 HTTP(端口 80)。如果您允许 HTTPS 连接,那么您将需要另一个具有所有 SSL 配置的端口 443(默认)的 vHost。
或者,您可以在访问任何不是本地 IP 地址的 IP时发出外部重定向(或内部重写,如果您想隐藏子目录) 。Users/username/Sites
例如,在您的主 vHost 容器(或<Directory /Users/username/Sites>
容器,或.htaccess
目录中的/Users/username/Sites/
文件)中,您可以执行以下操作:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^192\.168\.
RewriteCond %{REQUEST_URI} !^/[^/]+/subsite($|/)
RewriteRule ^/?(.*) /subsite/$1 [R,L]
这假设本地 IP 地址开始192.168.
在旁边:
与其为您创建的每个子站点创建一个新的子目录(在单个 vHost 中),不如为每个子站点创建一个新的 vHost 并将其指向一个单独的目录(不是子目录),这样就不会有重叠。
如果是这种情况,那么只需将ServerAlias
指令添加到适当的 vHost 容器即可:
ServerAlias dynamic-dns-hostname.example
推荐阅读
- sql-server - 报表生成器开关盒
- virtocommerce - vc-platform 3.58.0:platform.blades.modules-list.labels.manual-install-disabled
- hardware - Confluent 单节点的硬件要求
- python-3.x - AWS SAM 计划 Lambda 未按计划触发
- php - Yii2中的进程下载后返回引荐来源或刷新不起作用
- python-3.x - Python Turtle Graphics 窗口崩溃
- java - 防止 Firefox 在通过命令行 TaskKill 终止时崩溃?
- c++ - 为什么不能推导出这个模板参数?
- python - 为什么附加列表不能分配给变量?
- python - 我在 __init__ 中有一个位置论点