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

Laravel子域名部署添加.htaccess跳转public目录遇HTTP ERROR 500求助

解决Laravel子域名部署时.htaccess重定向到public目录导致的500错误

我来帮你一步步排查这个问题,Laravel部署子域名时遇到500错误,大概率是.htaccess配置、权限或者服务器环境的问题,咱们一个个来:

  • 先检查根目录的.htaccess文件是否正确
    很多人在这里写错规则导致500。你的Laravel项目根目录(不是public子目录)的.htaccess应该是这样的,不要混入public目录里的重写规则:

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteRule ^(.*)$ public/$1 [L]
    </IfModule>
    

    如果之前复制了public目录的.htaccess内容到根目录,两种规则冲突肯定会触发服务器错误。

  • 检查Laravel核心目录的权限
    500错误经常和权限不足挂钩,尤其是storage和bootstrap/cache这两个目录,服务器需要读写权限才能正常运行Laravel。
    如果你有SSH权限,执行这两个命令:

    chmod -R 755 storage bootstrap/cache
    chown -R www-data:www-data storage bootstrap/cache # Apache环境用这个,Nginx环境换成nginx用户
    

    没有SSH权限的话,通过主机面板的文件管理器,把这两个目录的权限设为755,目录下的文件设为644。

  • 查看服务器错误日志,定位具体原因
    HTTP 500是通用错误,看不到具体细节,必须看日志才能精准解决问题:

    • Apache服务器的日志一般在/var/log/apache2/error.log(Linux系统),或者主机面板的「错误日志」模块里;
    • Nginx服务器的日志在/var/log/nginx/error.log。
      日志里会明确告诉你是.htaccess语法错误、权限不足还是代码层面的报错,这是最关键的一步。
  • 确认子域名的文档根目录设置
    确保你的子域名指向的是Laravel项目的根目录,而不是public目录。因为我们要通过根目录的.htaccess重定向到public,如果直接把文档根设为public,根目录的.htaccess就起不到作用,反而可能引发冲突。

  • 检查PHP版本是否兼容
    不同版本的Laravel对PHP版本有硬性要求,比如Laravel 9需要PHP 8.0及以上,Laravel 10需要PHP 8.1及以上。如果服务器PHP版本太低,直接会触发500错误。你可以在项目根目录新建一个phpinfo.php文件,内容写<?php phpinfo(); ?>,访问这个文件查看PHP版本,再对照Laravel官方要求确认。

  • 清理Laravel缓存
    有时候缓存的旧配置会导致部署问题,尤其是你修改了APP_URL之后。执行以下命令清理缓存:

    php artisan config:clear
    php artisan cache:clear
    php artisan route:clear
    

    没有SSH权限的话,手动删除bootstrap/cache目录下的所有文件(保留.gitignore即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:51:46