这不是 web.config 的问题,我知道这一点是因为我重新安装了 IIS 来修复问题。但为了完整起见,这是我的 web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="CakePHP" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
IIS 中的错误:
HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
Module IIS Web Core
Notification MapRequestHandler
Handler StaticFile
Error Code 0x80070002
我的 index.php 的默认操作是如果尚未登录则重定向到登录---它正在这样做,但是:
所以据我所知,它实际上重定向到实际目录 /users/login,而不是重写到 index.php。
我已删除/重新安装,希望能修复它,但并没有。奇怪的是重写的一部分正在工作,“IsFile”工作正常,因为我在与 index.php 相同的目录中有一个“test.php”文件,并且能够加载它。
作为更新,我将进行失败请求跟踪:
http://www.iis.net/learn/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules
但是当我添加“重写”规则时,重写并不存在。(但 URL 重写在 IIS 面板中)。
问题解决了:
这个 URL 或多或少解决了这个问题:
http://forums.iis.net/t/1178209.aspx?URL+Rewrite+Module+Not+working+at+all
当转到失败请求跟踪时,我也没有选择“重写”选项。
程序和设置中的“修复”对我来说不起作用,所以我卸载了,然后重新安装,然后我走了!