You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:51:15