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

请求将Apache的.htaccess规则转换为Nginx Rewrite规则(Laravel项目)

将Laravel项目的Apache .htaccess转换为Nginx规则

以下是对应你两个.htaccess文件的Nginx配置,直接放到站点的server块中即可:

# 对应主目录.htaccess的规则
# 禁止访问敏感文件
location ~* \.(env|config.js|md|gitignore|gitattributes|lock)$ {
    deny all;
}

# 移除URL中的index.php(301永久重定向)
if ($request_uri ~* "^(.*/)index\.php$") {
    return 301 $1;
}

# 将非public开头的请求转发到public目录
location / {
    if ($request_uri !~ ^/public/) {
        rewrite ^/(.*)$ /public/$1 last;
    }
}

# 对应public子目录.htaccess的规则
location /public {
    # 处理Authorization头,传递给PHP
    fastcgi_param HTTP_AUTHORIZATION $http_authorization;

    # 移除尾部斜杠(非目录的情况)
    if (-d $request_filename) {
        break;
    }
    if ($request_uri ~* (.+)/$) {
        return 301 $1;
    }

    # Laravel前端控制器:非文件非目录的请求转发到index.php
    try_files $uri $uri/ /public/index.php?$query_string;
}

# PHP处理配置(根据实际PHP版本调整)
location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

规则对应说明

  • 敏感文件禁止访问:对应主目录.htaccess中的<Files>规则,通过Nginx的location匹配指定后缀,直接拒绝所有请求。
  • 移除index.php:匹配包含index.php的URL,返回301重定向到去掉index.php的路径,和Apache规则效果一致。
  • 转发到public目录:判断请求路径不以/public/开头时,重写路径到public目录下,用last标志终止当前规则并重新匹配。
  • Authorization头处理:在public目录的location中添加fastcgi_param,将HTTP_AUTHORIZATION头传递给PHP,对应Apache设置环境变量的逻辑。
  • 移除尾部斜杠:先判断请求是目录则跳过,否则匹配带尾部斜杠的URL,返回301重定向到去掉斜杠的路径。
  • 前端控制器:用Nginx标准的try_files指令,优先尝试访问文件、目录,都不存在时转发到/public/index.php,替代Apache的RewriteCond和RewriteRule组合。

注意:确保Nginx站点根目录指向Laravel项目主目录,PHP-FPM的套接字路径要和实际安装的PHP版本匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:20:17