修改.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机制。
测试验证:
- 访问主站不存在的页面(比如
https://www.yourdomain.com/nonexist),应该跳转到404-error.php并返回404状态码。 - 访问
https://www.yourdomain.com/blog/或https://www.yourdomain.com/blog/index.php,应该正常显示博客首页。 - 访问博客下的伪静态路径(比如
https://www.yourdomain.com/blog/post-title),如果是博客系统支持的路径,会被转发到blog/index.php处理;如果是博客里也不存在的路径,可在blog/index.php里处理内部404。
内容的提问来源于stack exchange,提问作者LEO-Network
相关产品推荐
相关产品推荐

