Laravel如何将public目录设置为网站根目录?
解决Laravel部署中public目录设为网站根目录的问题
看起来你遇到的核心问题是虚拟主机的文档根目录指向错误,加上Apache的重写模块或权限配置没到位,导致目录结构暴露、Rewrite规则不生效。按下面的步骤调整就能解决:
1. 修正虚拟主机的DocumentRoot
你的当前VirtualHost配置里,DocumentRoot指向的是Laravel应用的根目录,而不是public子目录。这是关键错误,修改成:
<VirtualHost *:80> ServerName myowneddomain.com ServerAlias www.myowneddomain.com ServerAdmin webmaster@localhost # 重点:指向public目录 DocumentRoot /var/www/myowneddomain.com/public # 添加<Directory>块确保权限和重写生效 <Directory /var/www/myowneddomain.com/public> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> # 其他原有配置(比如ErrorLog、CustomLog)保持不变 ... </VirtualHost>
2. 启用Apache的mod_rewrite模块
Laravel的URL重写依赖mod_rewrite,Ubuntu 16.04下默认可能没启用,执行命令启用:
sudo a2enmod rewrite
3. 确认Apache的全局目录权限配置
打开/etc/apache2/apache2.conf,找到针对/var/www/的配置块,确保AllowOverride All(默认可能是None,这会导致.htaccess规则被忽略):
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
4. 修复Laravel目录权限
为了避免后续运行时的权限问题,设置storage和bootstrap/cache目录的权限:
sudo chown -R www-data:www-data /var/www/myowneddomain.com/storage /var/www/myowneddomain.com/bootstrap/cache sudo chmod -R 775 /var/www/myowneddomain.com/storage /var/www/myowneddomain.com/bootstrap/cache
5. 重启Apache服务
所有配置修改完成后,重启Apache让设置生效:
sudo systemctl restart apache2
做完这些步骤,再访问你的域名,应该就能正常加载Laravel应用,目录结构不会再暴露,URL重写规则也会生效了。
内容的提问来源于stack exchange,提问作者user9250371
相关产品推荐
相关产品推荐

