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

修改.htaccess后404规则与博客页面无法共存的技术求助

修复.htaccess配置问题,同时实现404跳转与博客正常访问

先给你调整好的.htaccess配置,再讲关键修改点:

ErrorDocument 404 /404-error.php

RewriteEngine On 

# 强制HTTPS跳转
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 强制www前缀跳转
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

# 隐藏.php后缀(仅对主站非/blog路径生效)
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

# 将index.php重定向到对应目录根
RewriteCond %{THE_REQUEST} ^.*/index\.php
RewriteRule ^(.*)index.php$ /$1 [R=301,L]

# 博客目录专属规则:仅处理/blog/下的请求
# 跳过/blog/*/index.php的直接访问
RewriteRule ^blog/[^/]+/index\.php$ - [L]
# 仅当/blog/下的请求不是文件或目录时,转发到blog/index.php
RewriteCond %{REQUEST_URI} ^/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^blog/(.*)$ /blog/index.php [L]

关键修改说明

  • 移除全局RewriteBase:原来的RewriteBase /blog/会让后续所有重写规则都以/blog/为基准,导致主站的非存在页面也被导向博客首页。现在去掉后,给博客规则加上明确的路径前缀^blog/,限定规则只作用于博客目录。
  • 拆分主站与博客规则:给主站的.php后缀添加规则加上RewriteCond %{REQUEST_URI} !^/blog/,避免干扰博客的URL结构;博客的重写规则仅匹配/blog/开头的请求,不会影响主站的404逻辑。
  • 调整规则顺序:把HTTPS、www跳转这类全局强制规则放在最前面,确保先完成域名协议的统一,再处理后缀隐藏、目录重定向,最后处理博客的专属规则。这样主站里不存在的页面,因为不会触发任何重写规则,就会正常触发ErrorDocument 404指向404-error.php。
  • 明确博客规则的匹配范围:最后一条博客规则只转发/blog/下不存在的文件/目录请求到blog/index.php,不会覆盖主站的404机制。

测试验证:

  1. 访问主站不存在的页面(比如https://www.yourdomain.com/nonexist),应该跳转到404-error.php并返回404状态码。
  2. 访问https://www.yourdomain.com/blog/或https://www.yourdomain.com/blog/index.php,应该正常显示博客首页。
  3. 访问博客下的伪静态路径(比如https://www.yourdomain.com/blog/post-title),如果是博客系统支持的路径,会被转发到blog/index.php处理;如果是博客里也不存在的路径,可在blog/index.php里处理内部404。

内容的提问来源于stack exchange,提问作者LEO-Network

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:37:34