Apache虚拟主机指向中间文档根目录的配置咨询
Apache虚拟主机指向中间文档根目录的配置咨询
看起来你已经找对了方向,我来帮你把没写完的虚拟主机配置补全,顺便把容易踩的坑给你理清楚——毕竟你的场景是用中间目录当入口,和Laravel默认的配置不一样,得做些额外调整。
首先,先把你没写完的<Directory>块补全,这是Apache能正确解析Laravel路由的关键:
<VirtualHost *:8002> ServerName dev-myApp.be ServerAdmin webmaster@localhost DocumentRoot /home/name/workspace/indexes/indexOne/public ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/home/name/workspace/indexes/indexOne/public"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> </VirtualHost>
这里重点是AllowOverride All,它能让public目录下的.htaccess生效,Laravel的路由重写全靠这个配置。
接下来是核心的Laravel关联问题:你的文档根目录指向了indexOne/public,但Laravel的核心代码在myProject里,所以得修改indexOne/public/index.php里的路径,让它能找到Laravel的核心文件,同时加载当前indexOne目录下的.env:
- 打开
/home/name/workspace/indexes/indexOne/public/index.php - 把原来的自动加载和应用初始化代码修改成指向myProject的路径:
// 替换原来的vendor引入路径,指向Laravel核心项目 require __DIR__.'/../../myProject/vendor/autoload.php'; // 加载Laravel应用实例前,手动指定要使用的.env文件路径 $app = require_once __DIR__.'/../../myProject/bootstrap/app.php'; $app->loadEnvironmentFrom(__DIR__.'/../.env');
这样Laravel启动时就会用你indexOne里的.env配置,而不是myProject默认的那个。
最后是配置验证和收尾步骤:
- 把这个虚拟主机配置文件保存到Apache的站点目录,比如
/etc/apache2/sites-available/dev-myApp.be.conf - 启用站点:
sudo a2ensite dev-myApp.be.conf - 确保Apache重写模块已启用:
sudo a2enmod rewrite - 重启Apache生效:
sudo systemctl restart apache2 - 别忘了在本地hosts文件里加一条映射:
127.0.0.1 dev-myApp.be,这样才能正常访问这个虚拟主机
额外提醒几个容易踩的坑:
- 权限问题:给Apache运行用户(一般是
www-data)赋予目录读写权限,执行sudo chown -R www-data:www-data /home/name/workspace/indexes /home/name/workspace/myProject - 如果要配置indexTwo的虚拟主机,只需要复制一份上述配置,把所有
indexOne替换成indexTwo,ServerName改成比如dev-myApp-two.be就行
备注:内容来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

