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

Laravel应用部署在domain.or/yyy下的URL与路由配置问题

这种Laravel部署在子目录下的问题我碰过好多次,核心就是要让框架知道自己的「根路径」不是域名根目录,而是/yyy。我给你拆解成几个关键步骤来解决:

1. 修正静态资源路径(CSS/JS/图片等)

Laravel的asset()、url()这些辅助函数默认是从域名根目录生成链接的,所以得告诉框架实际的基础URL:

  • 打开项目根目录的.env文件,修改以下两个配置:
    APP_URL=https://domain.or/yyy
    ASSET_URL=https://domain.or/yyy
    
  • 如果修改后没生效,记得清除配置缓存(生产环境必做):
    php artisan config:cache
    
2. 让所有路由自动带上/yyy前缀

现在你的路由都是基于根目录的,手动加前缀太麻烦,直接在路由服务提供者里全局配置:

  • 打开app/Providers/RouteServiceProvider.php,找到boot()方法,在parent::boot();后面添加这段代码:
    Route::prefix('yyy')
         ->group(base_path('routes/web.php'));
    
  • 这样所有web.php里的路由都会自动带上/yyy前缀,不用一个个改。
  • 最后清除路由缓存:
    php artisan route:cache
    
3. 调整.htaccess适配子目录

你当前的.htaccess是为根目录部署写的,需要添加RewriteBase并修正规则,替换成下面的内容:

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

    RewriteEngine On
    # 关键:设置重写的基础路径为子目录
    RewriteBase /yyy/

    # 去除末尾斜杠(如果不是文件夹)
    RewriteCond %{REQUEST_FILENAME}!-d
    RewriteRule ^(.*)/$ $1 [L,R=301]

    # 处理前端控制器(Laravel的入口)
    RewriteCond %{REQUEST_FILENAME}!-d
    RewriteCond %{REQUEST_FILENAME}!-f
    RewriteRule ^ index.php [L]

    # 处理授权头
    RewriteCond %{HTTP:Authorization}.
    RewriteRule.* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
4. 确认服务器配置(避免403)

如果还是出现403错误,要检查Apache的站点配置:

  • 确保你的子目录(/yyy对应的服务器物理路径)配置里有AllowOverride All,这样.htaccess的规则才能生效。比如Apache虚拟主机配置里应该有:
    <Directory "/path/to/your/server/yyy">
        AllowOverride All
        Require all granted
    </Directory>
    
  • 修改后重启Apache服务。

按这几步走下来,静态资源、路由应该都能正常指向domain.or/yyy了,你可以先试试访问首页之外的页面,看看CSS加载和路由跳转是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:32:45