1

我面临一个问题:我确实想用 ASP.Net 进行 URL 重写

它使用我的本地设置可以完美运行,但是一旦在服务器上它就无法按预期工作。

当地的

对 /unavailable-file.aspx 的请求在 Application_Error (Global.asax.cs) 中运行良好,然后被重定向到 /404.aspx 对 /unavailable-random-folder 或任何其他文件的请求在 Application_Error (Global.asax.cs) 中运行良好asax.cs),然后被重定向到 /404.aspx

远程 对 .aspx 文件的任何请求都将在 Application_Error 中被捕获 每个其他请求(.jpg、文件夹等)根本不会被捕获并引发默认的 404 页面错误

我的问题:

昨天我正在将我的新网站安装到服务器上,我看到 Application_BeginRequest 甚至没有在我的服务器上被触发,而每次(对于请求的每个文件或文件夹)都是在我的本地计算机(使用 Visual Studio)中。我必须创建一个 HttpModule,现在我成功地触发了事件……但不是针对非 .aspx 请求。

一切似乎都绑定在 URL 上:当它以 .aspx 结尾时,它被正确管理,而当它不是时,它根本没有被管理。

即使对于非 aspx 页面,我应该怎么做才能捕获每个 Application_BeginRequest?

我在我的 web.config 中有它来尝试将 404 错误强制到我的页面中:

<customErrors mode="On"
  defaultRedirect="404.aspx">
  <error statusCode="404" redirect="404.aspx"/>
</customErrors>

但正如我所说,只要它不是以 .aspx 结尾的请求,它就不会被重定向,并且我会收到默认的 ASP.Net 404 错误。

(如果可以提供帮助,我的主机是“reliablesite”,并且我的 404 错误设置指向管理器内的 404.aspx 页面(共享主机),它不会改变任何东西)

我希望一切都能像在本地模式下一样工作。

如果您对如何解决该问题有任何提示,请告诉我。

4

2 回答 2

1

在开发 Web 服务器中,每个请求都由 aspx 引擎处理,仅此而已。在实时服务器中,不同的文件类型由不同的引擎处理。

要使实时服务器对每个请求都使用 aspx 引擎,您必须在 IIS 中更改网站的配置。

相关:ASP.net web.config 没有捕获所有 404

于 2012-06-07T23:06:19.240 回答
0

当你有一个共享环境时,这里给出了这个问题的解决方案:

  1. 在共享环境设置中激活 ASP.Net 集成管道(自 IIS 7 起可用)
  2. 将此添加到 web.config:

    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="RedirectHttpModule" type="RedirectHttpModule" />
    </modules>
    </system.webServer>
    

例如,其中 RedirectHttpModule 是处理 Application_BeginRequest 的自定义模块。

“runAllManagedModulesForAllRequests”意味着将对 Web 应用程序的所有请求调用所有托管模块。

于 2012-06-08T00:35:51.410 回答