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

在Web服务器子目录部署Laravel出现403错误的.htaccess配置求助

问题原因与解决方案

你遇到的403错误核心原因有两个:一是访问/erp路径时没有找到对应目录下的默认索引文件,Apache禁止列目录直接返回权限错误;二是现有根目录.htaccess的重写规则指向错误,没有把erp路径的请求转发到Laravel正确的入口目录。

1. 修正根目录.htaccess规则

原配置里的erp路径转发规则有误,当前是将/erp/的请求转发到站点根目录的public文件夹,而非erp子目录下的public文件夹,导致访问不到正确的入口文件。修改对应规则如下:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !GOOGLE404probe
# 修正转发路径指向erp子目录下的public
RewriteRule ^erp/(.*)$ /erp/public/$1 [L]
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

2. 补充Laravel必要的.htaccess配置

Laravel自带的public目录下默认包含入口重写规则,如果你没有保留该文件,需要在erp/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} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ index.php [L]
</IfModule>

如果希望直接访问/erp就能进入应用无需加/public后缀,也可以把上述文件复制到erp根目录,同时将erp目录下的server.php重命名为index.php即可。

3. 确认权限与Apache配置

  • 确保erp目录的所属用户与Web服务器运行用户一致,Linux下常用的Web服务器用户为www-data,可执行命令sudo chown -R www-data:www-data /你的站点根目录路径/erp修正所属权
  • 确保Apache已经开启mod_rewrite模块,且站点配置中允许.htaccess生效,即对应Directory配置段中有AllowOverride All配置
  • Laravel的storage和bootstrap/cache目录需要额外写入权限,可执行chmod -R 775 /你的站点根目录路径/erp/storage /你的站点根目录路径/erp/bootstrap/cache配置

内容的提问来源于stack exchange,提问作者Kis Gábor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:06:04