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

public目录下blog路由排除失败,访问域名/blog出现404错误

解决方案

你的核心问题是当前.htaccess规则没有优先处理/blog的请求,反而让它被后续的public目录转发或主站index.php接管了。以下是调整后的配置方案:

修改后的根目录.htaccess代码

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    RewriteEngine On

    # 优先处理/blog请求,直接指向public下的WordPress目录
    RewriteRule ^blog/(.*)$ public/blog/$1 [L]
    RewriteRule ^blog$ public/blog/ [L]

    # 处理现有文件/目录的直接访问
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    # 转发带后缀的静态资源到public目录
    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 [L]

    # 非文件/目录的请求交给主站index.php处理
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

关键调整说明

  1. 前置Blog规则:新增的两条RewriteRule放在最顶部,确保所有/blog开头的请求直接跳转到public/blog目录,[L]标记表示这是当前匹配的最后一条规则,不会触发后续主站路由逻辑。
  2. 移除冗余排除条件:删掉了原配置中两处RewriteCond $1 !^(blog),因为已经通过前置规则单独处理了Blog请求,无需重复排除。
  3. 保留WordPress自治:确保public/blog目录下存在WordPress自动生成的默认.htaccess文件(包含WordPress自身的重写规则),这样WordPress才能正常处理内部文章、页面的路由。

额外检查项

  • 确认public/blog目录权限为755,文件权限为644,保证Apache服务器能正常读取访问。
  • 检查Apache是否启用了mod_rewrite模块,Linux服务器可通过a2enmod rewrite命令启用,重启Apache生效。
  • 确保网站根目录的服务器配置(VirtualHost或Directory块)中设置了AllowOverride All,否则.htaccess规则无法生效。

内容的提问来源于stack exchange,提问作者Tariq Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:50:25