【问题标题】:Wildcard mapping for ASP.NET and issues with PHPASP.NET 的通配符映射和 PHP 的问题
【发布时间】:2009-12-08 17:34:31
【问题描述】:

我有一个用 C# 作为语言的 .NET 3.5 编写的应用程序。我正在使用 Web 表单,但使用 url 路由和我的全局文件中定义的路由。一切都按预期工作。为了使漂亮的路径(请参阅:user/665 而不是 user.aspx?uid=665)正常工作,我必须在 IIS5.1(本地框,而不是测试、暂存或生产)中添加通配符映射2.0 框架的 aspnet_isapi 文件。一切正常。

现在,我的网站需要一个 PHP 插件。但是,由于通配符映射,PHP 文件现在由 ASP.NET 提供服务,因此 PHP 解释器不处理这些文件。有没有办法解决这个问题?我是否必须在我的 Web 应用程序中添加某种处理程序来接收所有由 ASP.NET 框架处理的 PHP 请求并将它们路由到 PHP 引擎?有没有更简单的方法?也许是一种在 web.config(PHP 文件)中排除它们并让它们由适当的 PHP 引擎提供服务的方法?

谢谢大家! -史蒂夫

【问题讨论】:

    标签: c# php asp.net wildcard-mapping


    【解决方案1】:

    这是一个解决方案,但不是一种优雅的方式(恕我直言):

    1. 创建虚拟目录
    2. 让它指向包含文件的文件夹(在本例中为 PHP 插件)
    3. 给它适当的权限
    4. 更改 IIS 中虚拟目录的配置选项,并确保删除该目录的通配符映射。

    这对我的情况来说就像一个魅力。但是,有什么办法可以不用处理虚拟目录?

    【讨论】:

      【解决方案2】:

      问题是需要注册PHP扩展。

      1. 在 IIS 管理器中右键单击默认网站 -> 属性 -> 主目录 -> 配置
      2. 在应用程序映射下确保添加了 .php 并且它指向 PHP.EXE。应该有这样的条目:扩展名.php,可执行路径C:\PHP\PHP.EXE %s %s

      【讨论】:

        【解决方案3】:

        据我所知,问题在于 ASP.NET 正在尝试路由您的 PHP 请求,所以我要做的是在 global.asax 中的路由中添加一个 StopRoutingHandler()。像这样的东西应该可以工作:

        routes.Add(new Route("{resource}.php/{*pathInfo}", new StopRoutingHandler()));
        

        编辑:请注意路由是按顺序处理的,所以我会将其添加到您的路由顶部。

        【讨论】:

        • 太棒了。让我试一试,我会回复你的。
        • 不行。我猜会发生什么是 PHP 解释器没有为 PHP 文件提供服务,并且由于通配符映射而被移交给 ASP.NET。 global.asax 文件建立了一个 StopRoute,而 PHP 文件只是落在了它的脸上。我需要 PHP 引擎以某种方式为 PHP 文件提供服务。
        猜你喜欢
        • 2010-11-13
        • 2010-12-27
        • 2017-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多