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

WordPress站点通过.htaccess为指定URL设置404状态码的问题求助

WordPress站点通过.htaccess为指定URL设置404状态码的问题求助

问题描述

我想在WordPress网站的.htaccess中为特定URL设置404 HTTP状态码,目标URL是https://www.infocera.com/oppo-find,但希望它的带.html后缀版本https://www.infocera.com/oppo-find.html能正常访问。

我尝试过一些规则,但目前遇到的问题是:访问/oppo-find时会先被301重定向到/oppo-find.html,然后这个带后缀的页面也返回404了,这不是我想要的结果。

以下是我当前的.htaccess完整代码:

RewriteEngine On

# ensure www and https
RewriteCond %{HTTP_HOST} !^www.infocera.com$ [NC]
RewriteRule ^(.*)$ https://www.infocera.com/$1 [L,R=301]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 404 status code for category slugs
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/oppo-find/?$
RewriteRule ^ - [R=404,L]

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/garmin-forerunner/?$
RewriteRule ^ - [R=404,L]

#RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{QUERY_STRING} ^m=[01]$ [NC]
RewriteRule ^(.*)$ /$1? [L,NC,R=404]

#RewriteRule ^(.*)$ https://www.infocera.com/$1 [L,R=301]
RewriteRule ^(images/[^.]+)\.jpg$ /$1.webp [R=301,L,NC]

解决方案

你的问题主要出在规则顺序不当和没有避开WordPress的默认重定向行为——WordPress会自动把无后缀的请求重定向到对应带.html的页面(如果页面存在)。要实现目标,我们需要调整规则的位置和写法,具体如下:

1. 清理冗余配置

整个.htaccess文件只需要开头声明一次RewriteEngine On即可,重复声明不仅没用还可能引发冲突,先把这些重复的删掉。

2. 调整规则顺序

正确的规则顺序应该是:

  • 先执行WWW/HTTPS的强制跳转(标准化请求)
  • 然后执行你的自定义规则(404、图片重定向等)
  • 最后保留WordPress默认的重写规则(这部分是WordPress页面路由的核心,必须放在最后)

3. 精确匹配目标URL

修改404规则的写法,确保只命中无后缀的/oppo-find(含可选的尾部斜杠),不会影响带.html的版本。

以下是调整后的完整.htaccess代码:

RewriteEngine On

# 强制跳转至www和HTTPS
RewriteCond %{HTTP_HOST} !^www.infocera.com$ [NC]
RewriteRule ^(.*)$ https://www.infocera.com/$1 [L,R=301]

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 为指定URL设置404(必须放在WordPress规则之前)
# 匹配/oppo-find 或 /oppo-find/,直接返回404
RewriteRule ^oppo-find/?$ - [R=404,L]
# 匹配/garmin-forerunner 或 /garmin-forerunner/,直接返回404
RewriteRule ^garmin-forerunner/?$ - [R=404,L]

# 处理带m参数的请求返回404
RewriteCond %{QUERY_STRING} ^m=[01]$ [NC]
RewriteRule ^(.*)$ /$1? [L,NC,R=404]

# 将.jpg图片重定向为.webp
RewriteRule ^(images/[^.]+)\.jpg$ /$1.webp [R=301,L,NC]

# BEGIN WordPress
# 注意:这部分是WordPress自动生成的规则,务必保留在最后
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

关键说明

  • 为什么要调整顺序?
    把404规则放在WordPress规则之前,当请求/oppo-find时,会先被这个规则拦截并直接返回404,不会触发WordPress自动重定向到/oppo-find.html的行为。
  • 精确匹配的作用
    RewriteRule ^oppo-find/?$ - [R=404,L]中的^和$是锚定符,确保只匹配完整的/oppo-find路径,/?允许请求末尾带或不带斜杠,完全不会影响/oppo-find.html的正常访问。

备注:内容来源于stack exchange,提问作者Jai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 06:18:02