【问题标题】:Getting 404 errors using Slim PHP on IIS7在 IIS7 上使用 Slim PHP 得到 404 错误
【发布时间】:2012-12-16 15:21:06
【问题描述】:

我正在尝试将 Slim PHP 框架与 IIS7 一起使用。现在在某些路线上,我不断从 IIS 获得 404,我觉得这真的很令人困惑。这是我的索引 php:

    require 'slim/slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();

$app->notFound(function () use ($app) {
    echo("not found!");
});
$app->get("/books/:id", function($id){
    echo("hello book " . $id . "!");
});
$app->get("/test",function(){
    echo("testing");
});

$app->run();

在 IIS(运行 PHP 5.3)上,我设置了 url 重写以将所有请求发送到我的 index.php 文件并禁用目录浏览。这似乎工作正常,因为转到 localhost/books/123 会产生“hello book 123!”。但是当我去 localhost/test 时,我只是从 IIS 收到 404 错误!如果向该 url 添加一个斜杠,我的 slim notFound 处理程序将被触发,而不是我的路由处理程序。

如果我创建一个名为“test”的目录,它会停止 404 响应,但会触发 slim notFound 处理程序,而不是我期望的定义的路由处理程序。这看起来很奇怪,因为我禁用了目录浏览。

我知道我的 slim notFound 处理程序工作正常,因为尝试 localhost/abc/xyz 会触发处理程序并按预期工作。

谁能解释发生了什么以及为什么?我是否忽略了一些配置?

谢谢。

【问题讨论】:

    标签: iis slim


    【解决方案1】:

    事实证明,这种奇怪的行为是由我在 IIS 上的 url 重写规则引起的。呵呵!

    我将正则表达式规则 /.* 重写到我的 index.php 文件,而不是使用 .* 作为正则表达式。 第一个斜杠没有包含在重写的 url 中,这导致了我描述的问题。将正则表达式更改为 .* 修复了所有问题。

    如果其他人遇到这样的问题,请仔细检查您的 url 重写规则,即使它似乎工作正常!

    我非常简单的 web.config 文件是:

    <configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="slim catch all" enabled="true">
                    <match url=".*" />
                    <action type="Rewrite" url="/index.php" />
                    <conditions>
                        <add input="{URL}" pattern="/content/.*" negate="true" />
                    </conditions>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
    

    注意:这是在 IIS 上使用 URL Rewrite 2.0 Index.php 是设置所有 Slim 路由的文件。条件是停止通过 Slim 路由对 /content/ 路径的请求 - 这使它成为存储图像、css 文件和 javascript 等内容的好地方,因为响应应该更快,因为它们不被 Slim 处理。

    【讨论】:

    • 嗨@Matt27,我正在尝试使用iis7 配置slim。不知道如何为 url 重写设置 web.config。你能帮忙吗?
    • @Wikki web.config 是一个 IIS 用来设置其配置的 xml 文件。我编辑了我的答案以包含一个非常基本的 web.config 文件。您需要在 IIS (iis.net/downloads/microsoft/url-rewrite) 上安装 URL Rewrite 2.0 来进行 url 重写。
    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 2016-04-23
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2018-04-13
    相关资源
    最近更新 更多