【问题标题】:How to get IIS6 to recognize pathinfo routes instead of returning "404 Undescribed" error?如何让 IIS6 识别 pathinfo 路由而不是返回“404 未描述”错误?
【发布时间】:2011-09-21 07:52:48
【问题描述】:

我正在用 PHP 开发一个 RESTful Web 应用程序。我得到的是:

  1. 测试服务器上,Windows 7 / Apache 2.2 / PHP 5.2.9 (mod_php)
  2. 生产服务器上,Windows Server 2003 / IIS6 / PHP 5.2.4 (php5isapi.dll)

虽然测试环境没有问题,但生产服务器无法发送任何带有 pathinfo 的 RESTful 请求(即,像 /mypath/app.php/controller/id 这样的页面,其中处理脚本是 /mypath/app.php)并给出了一个漂亮的空白页面,其中包含留言:

No input file specified. 

使用 firebug,我可以看到响应头是:

HTTP/1.1 404 Undescribed
Proxy-Connection: close
Connection: close
Via: 1.1 XXXXX
Date: Thu, 23 Jun 2011 14:51:18 GMT
Content-Type: text/html
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET, PHP/5.2.4

其中XXXXX 是代理的名称。

我四处搜索,似乎 SO 和网络的其他部分都无法为这个问题提供切实可行的解决方案。有什么线索吗?

由于生产服务器需要跟上,重新安装 PHP 和/或 IIS 是不是一个选项。我可以做的是修改 IIS/PHP 配置,然后重新启动 IIS。

提前致谢,

保罗

【问题讨论】:

    标签: php iis-6 restful-url pathinfo


    【解决方案1】:

    @hakre 发布了一个很好的答案,但这是解决此问题的另一件事,我简要报告一下,以便为其他人节省数小时的痛苦......

    我通过以下方式解决了这个问题:

    • 在生产服务器上编辑php.ini,注释掉doc_root=...这一行;
    • 重新启动 IIS;
    • 在生产服务器上启动services.msc,重启“万维网发布服务”;

    现在,所有页面都可以正常报告PATH_INFO

    还是谢谢你的回答!

    如果有人关心,this page 照亮了我。

    【讨论】:

      【解决方案2】:

      取消选中验证文件是否存在复选框。

      这是 Internet 信息服务管理器中的一个选项,您可以在 网站 属性 主目录 配置中找到 .php em>应用映射

      编辑相关网站的映射并禁用文件存在性检查。然后 pathinfo 应该按预期工作。

      More Info

      【讨论】:

      • 感谢您的回答,我试过这样做,重新启动 IIS,也取消选中“缓存 ISAPI 扩展”,再次重新启动,但没有任何改变。我什至无法获得一个简单的页面,比如 /phpinfo.php/pathinfo_test 被识别。相同的错误:404 未描述的标头。
      【解决方案3】:

      尝试使用 ISAPI_REWRITE(http://www.isapirewrite.com/) 重写支持

      【讨论】:

      • 正如我在问题中所述,我无法在生产服务器上安装其他库。此外,您提到的是商业产品,所以这不是一个可行的解决方案。
      • 所以,尝试配置404文档,让每个人都请求该文件并在该文件中处理。
      猜你喜欢
      • 2019-07-07
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多