Nginx配置404删除页跳转首页部分链接不生效求助
问题原因
你当前配置无法覆盖.php后缀页面跳转的核心原因有2个:
- 你把
error_page 404规则写在了location /块内部,而站点一般都会单独配置匹配.php后缀的location块用来解析PHP请求,你给出的两个失效链接都是.php结尾,请求会优先匹配PHP解析的location块,不会继承location /里的错误页规则,自然无法触发跳转。 - 你当前的error_page写法没有指定跳转状态码,就算触发规则,也是在原URL下返回首页内容,不会实现地址栏跳转到首页的效果,且对SEO不友好。
修正方案
- 将404处理规则移动到
server块层级,让所有location块(包括PHP解析块)都能全局继承该规则 - 如果你需要实现地址栏跳转,给error_page指定301(永久跳转)/302(临时跳转)状态码;如果希望保留原URL、返回404状态码同时展示首页内容(更符合搜索引擎规范,避免被判定为作弊),直接指向首页文件路径即可
- 确认PHP解析的location块内没有单独配置error_page规则覆盖全局配置
修正后参考配置
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name _; # 方案1:301永久跳转到HTTPS首页(地址栏会变更为首页地址,匹配你原本的需求) error_page 404 =301 https://nitmeghalaya.in/; # 方案2:保留URL返回404状态码,展示首页内容(SEO更友好,可按需替换) # error_page 404 /index.php; location / { try_files $uri $uri/ =404; } # 原有PHP解析配置(你之前贴的配置漏了这段,这是.php链接不跳转的核心原因) location ~ \.php$ { include snippets/fastcgi-php.conf; # 替换为你服务器实际的php-fpm监听地址,常见为php7.4-fpm.sock、php8.0-fpm.sock等 fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 不要在此处单独定义error_page,避免覆盖全局规则 } }
生效操作
配置修改完成后依次执行以下命令:
- 执行
nginx -t检查配置语法是否正确,避免配置错误导致Nginx无法启动 - 语法校验通过后执行
systemctl reload nginx重载配置即可生效
内容的提问来源于stack exchange,提问作者Go Daddy
相关产品推荐
相关产品推荐

