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
相关产品推荐
相关产品推荐

