Mac下如何配置/etc/hosts将子文件夹当作根目录访问?
解决Apache多站点根目录映射问题
/etc/hosts仅能实现域名到IP的映射,无法直接将子路径设为站点根目录。要实现你的需求,最可靠的方案是配置Apache虚拟主机,也可通过.htaccess重写规则快速处理,具体步骤如下:
方法一:配置虚拟主机(推荐)
这是管理多站点的标准方式,每个站点拥有独立域名与根目录:
- 启用虚拟主机模块
打开Homebrew安装的Apache主配置文件(Intel芯片路径为/usr/local/etc/httpd/httpd.conf,M系列芯片为/opt/homebrew/etc/httpd/httpd.conf),找到以下两行并移除开头的#注释:
#LoadModule vhost_alias_module lib/httpd/modules/mod_vhost_alias_module.so #Include /usr/local/etc/httpd/extra/httpd-vhosts.conf
注意第二行路径需与你的实际安装路径匹配。
- 编写虚拟主机配置
打开虚拟主机配置文件/usr/local/etc/httpd/extra/httpd-vhosts.conf,添加以下内容(替换你的用户名为系统实际用户名):
<VirtualHost *:80> ServerName site1.local DocumentRoot "/Users/你的用户名/Sites/site1" <Directory "/Users/你的用户名/Sites/site1"> AllowOverride All Require all granted </Directory> </VirtualHost> <VirtualHost *:80> ServerName site2.local DocumentRoot "/Users/你的用户名/Sites/site2" <Directory "/Users/你的用户名/Sites/site2"> AllowOverride All Require all granted </Directory> </VirtualHost>
- 绑定本地域名
编辑/etc/hosts文件,添加以下内容,将自定义域名指向本地IP:
127.0.0.1 site1.local 127.0.0.1 site2.local ::1 site1.local ::1 site2.local
- 重启Apache生效
执行命令重启Apache服务:
brew services restart httpd
之后访问site1.local直接对应site1的根目录,site2.local对应site2的根目录,站点内的相对路径都会基于各自目录解析。
方法二:使用.htaccess重写规则(临时快速方案)
若不想修改Apache主配置,可在每个站点目录下创建.htaccess文件重写路径:
在site1目录下创建.htaccess,添加以下内容:
RewriteEngine On RewriteBase /site1/ RewriteCond %{REQUEST_URI} !^/site1/ RewriteRule ^(.*)$ /site1/$1 [L,R=301]
同理在site2目录下创建.htaccess,将RewriteBase和规则中的site1替换为site2。该方式会将指向根目录的请求重定向到子路径,让站点识别自身目录为根。
注意:使用此方法需确保Apache主配置中对应Sites目录的<Directory>块开启了AllowOverride All,否则.htaccess规则不会生效。
内容的提问来源于stack exchange,提问作者JessycaFrederick
相关产品推荐
相关产品推荐

