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

Laravel Forge NGINX配置:移除URL中的.php后缀适配旧路由

Laravel迁移后Nginx处理旧.php URL的解决方案

1. 301重定向 vs 内部转发的选择

  • 优先选301重定向:你有900个旧URL,大概率已经被搜索引擎收录、用户存了书签或者有外部链接指向这些地址。301是永久跳转,能让搜索引擎把权重转移到无.php的新路径,同时用户地址栏会自动更新为正确的无后缀URL,彻底解决重复内容问题,对SEO和用户体验都更友好。
  • 内部转发仅作过渡用:如果只是临时兼容旧路径、不想让用户感知变化,可以用内部转发。但这种方式会让同一个内容同时存在带.php和不带的两个URL,容易引发SEO重复内容惩罚,除非你在Laravel页面里手动添加canonical标签指定首选地址。

2. NGINX配置修改方案

方案一:301重定向(推荐)

在location /块之前添加重定向规则,自动把所有带.php的URL跳转到去掉后缀的版本:

# 匹配带.php的URL,去掉后缀后301永久跳转
location ~ ^(.+)\.php$ {
    return 301 $1$is_args$args;
}

原有的location ~ \.php$块可以保留,用来处理服务器上可能还存在的真实.php文件(如果有遗留);要是已经完全迁移到Laravel,也可以注释掉这个块,但建议暂时留着以防万一。

修改后的核心配置片段:

# 新增:去掉.php后缀的301重定向
location ~ ^(.+)\.php$ {
    return 301 $1$is_args$args;
}

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt  { access_log off; log_not_found off; }

access_log off;
error_log  /var/log/nginx/www.sageaudio.com-error.log error;

error_page 404 /index.php;

# 保留原PHP处理块(可选,完全迁移后可注释)
location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

location ~ /\.(?!well-known).* {
    deny all;
}

方案二:内部转发(无地址栏变化)

如果选择内部转发,修改location ~ \.php$块,把请求转发给Laravel处理,同时隐去.php后缀:

location ~ ^(.+)\.php$ {
    # 重写URI去掉.php,交给Laravel路由处理
    rewrite ^(.+)\.php$ $1 last;
}

这样用户访问带.php的URL时,地址栏不会变化,但实际请求会被Laravel的无后缀路由处理。需要注意的是,必须在Laravel对应的页面中添加canonical标签,比如<link rel="canonical" href="https://your-domain.com/your-path">,告诉搜索引擎哪个是首选地址,避免重复内容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:10:29