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

Laravel网站上传至虚拟主机后显示目录结构而非指定Web路由

Laravel部署后显示项目目录而非Web路由的解决方案

我来帮你排查这个问题,Laravel上传到虚拟主机后显示目录结构,通常是Web根目录配置不对或者服务器重写规则没生效导致的,咱们一步步来解决:

  • 确认虚拟主机的Web根目录指向public文件夹
    这是最常见的原因!很多虚拟主机默认把网站根目录设为项目的根文件夹(比如public_html),但Laravel的入口文件是public/index.php,必须让服务器把请求指向这个文件夹。你可以登录虚拟主机控制面板(比如cPanel),找到域名管理相关的设置,把对应域名的根目录修改为你的项目文件夹/public(举个例子:如果项目放在public_html/laravel里,就设置为public_html/laravel/public)。

  • 检查Apache是否启用了mod_rewrite模块
    你的.htaccess规则依赖mod_rewrite模块才能生效。如果是cPanel主机,在“软件”板块找到“Apache模块”,勾选mod_rewrite并保存;如果有SSH权限,可以执行命令:

    sudo a2enmod rewrite
    sudo systemctl restart apache2
    
  • 确保.htaccess文件放在public目录下
    Laravel的.htaccess应该放在public文件夹里,而不是项目根目录。建议替换成Laravel默认的public/.htaccess内容(比你当前的更完整):

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews -Indexes
        </IfModule>
    
        RewriteEngine On
    
        # Handle Authorization Header
        RewriteCond %{HTTP:Authorization} .
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
        # Redirect Trailing Slashes If Not A Folder...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} (.+)/$
        RewriteRule ^ %1 [L,R=301]
    
        # Send Requests To Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </IfModule>
    
  • 检查目录权限
    确保public文件夹及内部文件的权限正确,一般设置文件夹权限为755,文件权限为644。在cPanel里可以右键文件夹选择“更改权限”来调整。

  • 如果是Nginx服务器
    要是你的虚拟主机用的是Nginx,.htaccess是不起作用的,需要修改Nginx配置文件,添加重写规则:

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    

    这种情况可能需要联系主机提供商帮忙修改配置,或者通过主机面板调整。

内容的提问来源于stack exchange,提问作者Prateek Saini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:54:25