You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Nginx部署Laravel页面无法显示,Apache的AllowOverride All对应Nginx配置是什么?

在Nginx中配置Laravel以替代Apache的AllowOverride All解决404问题

我刚帮好几个开发者解决过一模一样的问题——Apache里的AllowOverride All本质是允许.htaccess文件中的重写规则生效,而Nginx本身不支持.htaccess,所以得直接在站点配置里写对应的规则来替代,这才是解决Laravel页面404的核心。

下面是具体的操作步骤和配置示例:

1. 找到你的Nginx站点配置文件

一般在/etc/nginx/sites-available/(Debian/Ubuntu系)或者/etc/nginx/conf.d/(CentOS/RHEL系)目录下,找到对应你Laravel项目的配置文件,比如laravel-app.conf

2. 配置核心规则(替代AllowOverride All)

打开配置文件,把下面的内容作为参考修改,重点关注rootlocation /块里的try_files指令:

server {
    listen 80;
    server_name your-domain.com; # 替换成你的域名、IP或者用`_`匹配所有请求
    root /var/www/laravel-project/public; # 必须指向Laravel的public目录!这是很多人踩的坑

    index index.php index.html index.htm;

    # 这部分就是替代Apache AllowOverride All的核心
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        # 逻辑:先找请求的文件/目录,不存在就交给index.php处理(Laravel路由接管)
    }

    # 处理PHP请求的配置
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        # 注意PHP-FPM的版本,根据你实际安装的版本修改,比如php7.4-fpm.sock
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 禁止访问.htaccess(Nginx不需要这个文件,直接禁用更安全)
    location ~ /\.ht {
        deny all;
    }
}

3. 验证配置并重启Nginx

修改完配置后,先检查有没有语法错误:

sudo nginx -t

如果输出test is successful,就可以重启Nginx让配置生效:

sudo systemctl restart nginx

额外注意事项

  • 权限问题:确保Laravel项目的storagebootstrap/cache目录有web服务器用户(比如www-data)的写入权限,不然可能会出现500错误或者路由异常
  • PHP-FPM路径:不同系统的PHP-FPM sock文件路径可能不同,如果找不到,可以用find /run/php/ -name "*.sock"命令查找
  • 不要指向项目根目录:如果root设成Laravel项目的根目录而不是public,不仅会404,还会暴露敏感文件,非常不安全

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

火山引擎 最新活动