Nginx中移除URL中的index.php并实现301重定向
Nginx 301重定向去除URL中的index.php前缀
要实现将带index.php的URL(如https://www.example.com/index.php/author/article-title)301永久重定向到干净的URL(https://www.example.com/author/article-title),同时保证正确URL正常访问,你需要替换原有错误的Nginx规则,使用以下配置:
# 匹配带index.php的URL,捕获后续路径并301重定向 location ~* ^/index.php(/.*)$ { return 301 $scheme://$host$1; } # 处理正常URL的路由逻辑(适配PHP应用) location / { try_files $uri $uri/ /index.php$is_args$args; } # PHP文件的常规处理配置(根据你的环境调整) location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
配置说明
- 第一个正则
location:不区分大小写匹配所有以/index.php开头的URL,通过(/.*)$捕获index.php之后的完整路径(如/author/article-title),存入变量$1。 return 301指令:生成永久重定向响应,将URL替换为域名+捕获的路径,彻底去除index.php前缀。- 第二个
location /:确保不带index.php的正常URL能正确路由到后端PHP脚本处理,避免404错误。 - PHP处理配置:根据你的PHP版本、FPM套接字路径调整,保证PHP应用能正常解析请求。
原有规则的问题
你之前的try_files用法错误:try_files不支持在参数中写入正则表达式,且未正确捕获和传递路径参数,导致Nginx无法匹配到有效资源,最终返回500服务器错误。
内容的提问来源于stack exchange,提问作者wav
相关产品推荐
相关产品推荐

