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

Nginx配置求助:已移除.php扩展名但无法添加URL尾部斜杠

Nginx配置:移除.php扩展名并添加尾部斜杠

你的现有配置中,@extensionless-php块里的rewrite ^/(.*)/$ /$1 permanent;是在移除尾部斜杠,这和你的需求完全相反,加上规则顺序不合理,导致无法实现自动添加尾部斜杠的效果。

以下是修正后的配置,可同时满足移除.php扩展名和添加尾部斜杠的需求:

# 处理带.php的URL,重定向到带尾部斜杠的无扩展名地址
location ~ ^(.+)\.php$ {
    return 301 $1/$is_args$query_string;
}

# 处理不带尾部斜杠的URL,重定向到带斜杠的版本
location ~ ^(.+[^/])$ {
    # 若对应HTML/PHP文件存在,添加尾部斜杠
    if (-f $request_filename.html) {
        return 301 $uri/$is_args$query_string;
    }
    if (-f $request_filename.php) {
        return 301 $uri/$is_args$query_string;
    }
    # 若为目录,也添加尾部斜杠
    if (-d $request_filename) {
        return 301 $uri/$is_args$query_string;
    }
}

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

# PHP文件执行配置(根据服务器实际PHP-FPM路径调整)
location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

配置说明:

  • 第一步规则:直接匹配所有带.php的URL,301重定向到去掉后缀并加尾部斜杠的地址,覆盖案例1的需求。
  • 第二步规则:匹配所有不带尾部斜杠的URL,判断对应静态文件或PHP文件存在时,自动重定向到带斜杠的版本,覆盖案例2、3的需求。
  • 主location块:负责正常请求的分发逻辑,依次尝试直接访问、目录、静态HTML,最后解析PHP文件。
  • PHP执行块:确保PHP文件能正常解析运行,需根据你服务器的PHP-FPM实际配置调整路径。

验证效果:

  • example.com/about-us.php → example.com/about-us/
  • example.com/about-us → example.com/about-us/
  • example.com/about-us?s=search → example.com/about-us/?s=search

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:40:43