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

Windows IIS服务器下CakePHP子目录WordPress伪静态404问题求助

解决方案:修复CakePHP + WordPress在IIS 8.5下的伪静态404问题

我帮你梳理了现有配置里的问题,主要是根目录web.config的规则顺序不合理,导致WordPress的伪静态请求被CakePHP的规则拦截了。按照下面的步骤调整配置,就能解决404问题:

一、确认IIS必备组件

  • 先确保你的IIS已经安装了URL重写模块,如果没装的话,去服务器管理器的「角色和功能」里添加——这是伪静态功能生效的基础,没它一切白搭。

二、修正根目录(cakePHP文件夹)的web.config

原来的根配置里,虽然有放行blog的规则,但后续的资源重写规则会误把blog的请求导向CakePHP的webroot,而且规则顺序也不对。替换成下面的配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<!-- 1. 优先放行blog目录的所有请求,直接交给blog下的配置处理 -->
<rule name="Pass through to WordPress blog" stopProcessing="true">
<match url="^blog(/.*)?$" />
<action type="None" />
</rule>
<!-- 2. HTTP强制转HTTPS -->
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
</rule>
<!-- 3. 排除直接访问app/webroot的特定路径 -->
<rule name="Exclude direct access to app/webroot/*" stopProcessing="true">
<match url="^app/webroot/c$" ignoreCase="false" />
<action type="None" />
</rule>
<!-- 4. 重写CakePHP的静态资源请求 -->
<rule name="Rewrite routed access to assets" stopProcessing="true">
<match url="^(buyanddelight|crm_geet|geet_jewellery1|geet_jewellery|img|css|files|js|favicon.ico)(.*)$" />
<action type="Rewrite" url="app/webroot/{R:1}{R:2}" appendQueryString="false" />
</rule>
<!-- 5. 其他所有请求交给CakePHP处理 -->
<rule name="Rewrite requested file/folder to index.php" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<action type="Rewrite" url="index.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
<httpErrors errorMode="Custom" defaultPath="C:\Inetpub\wwwroot\Indexhome_.htm">
<error statusCode="403" subStatusCode="4" path="C:\Inetpub\wwwroot\Indexhome_.htm" responseMode="File" />
</httpErrors>
</system.webServer>
</configuration>

修改要点:

  • 把放行blog的规则移到最顶部,确保所有blog/开头的请求都不会被CakePHP的规则拦截;
  • 移除了资源重写规则里的blog条目,避免把WordPress的静态资源误导向CakePHP的webroot。

三、调整blog目录下的web.config

原来的规则用了Wildcard语法,换成更精准的正则表达式语法,确保伪静态路径能被正确匹配:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WordPress Rewrite" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:0}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
<!-- 可选:禁用目录浏览,更安全 -->
<directoryBrowse enabled="false" />
</system.webServer>
</configuration>

修改要点:

  • 用.*匹配所有URL路径,比Wildcard的*兼容性更好;
  • 重写动作里添加/{R:0},确保WordPress能正确获取伪静态路径的参数。

四、WordPress后台收尾设置

  1. 登录WordPress后台,进入「设置 → 固定链接」;
  2. 选择你需要的伪静态格式(比如「文章名称」),点击「保存更改」——这一步会让WordPress确认重写规则,同时生成内部路由逻辑。

五、测试验证

  • 访问https://www.baseurl.com/blog/hello-world/,应该能正常打开文章页面,不再返回404;
  • 同时验证CakePHP的正常访问、静态资源加载是否不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:38:26