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

如何修改主机根目录 解决Laravel站点静态资源带public路径问题

Laravel共享主机部署静态资源路径带/public前缀问题修复

问题表现

站点基于Laravel框架开发,迁移到虚拟主机部署时,所有css、js、图片等静态资源必须通过example.com/public/资源路径才能访问,无法直接通过预期的example.com/资源路径访问,需要通过调整根目录配置解决。
当前使用的.htaccess配置如下:

DirectoryIndex public/index.php

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -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 ^ public/index.php [L]
</IfModule>

问题原因

现有重写规则仅将不存在的动态请求转发到public/index.php入口文件,没有对静态资源请求做映射:当请求静态资源时,服务器会直接在站点根目录查找对应文件,找不到就会返回404,只有手动加上/public前缀才能命中public目录下的实际资源文件。

修复方案

直接将站点根目录的.htaccess文件替换为以下配置即可,配置会优先判断请求的静态资源是否在public目录存在,存在则直接返回资源,不存在的动态请求再交由Laravel前端控制器处理:

DirectoryIndex public/index.php

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -Indexes
    </IfModule>

    RewriteEngine On

    # 静态资源路径映射到public目录
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -d
    RewriteRule ^(.*)$ /public/$1 [L]

    # 处理Authorization请求头
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # 非目录路径移除末尾斜杠
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # 动态请求转发到Laravel入口
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ public/index.php [L]
</IfModule>

注意事项

  • 配置生效后无需修改Laravel框架内文件,也不需要调整前端模板中的资源引用路径,直接访问不带/public前缀的资源地址即可正常加载
  • 提前确认主机已开启Apache的mod_rewrite重写模块,否则重写规则不会生效
  • 若配置后资源仍无法访问,检查public目录及下属静态资源的文件权限,确保服务器运行用户有可读权限

内容的提问来源于stack exchange,提问作者Dima Vatral

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:45:31