0

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

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

谢谢大家!-史蒂夫

4

3 回答 3

1

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

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

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

于 2009-12-08T17:57:37.147 回答
0

问题是需要注册 PHP 扩展。

  1. 在 IIS 管理器中右键单击默认网站 -> 属性 -> 主目录 -> 配置
  2. 在 Application Mappings 下确保添加了 .php 并且它指向 PHP.EXE。应该有这样的条目:扩展名.php,可执行路径C:\PHP\PHP.EXE %s %s
于 2009-12-08T17:38:54.877 回答
0

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

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

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

于 2009-12-08T17:40:31.300 回答