使用 mod_aspdotnet 在 Apache 2.2 上配置 ASP.NET MVC2

使用 mod_aspdotnet 在 Apache 2.2 上配置 ASP.NET MVC2

尝试让 Microsoft MVC2 网站在利用 mod_aspdotnet 模块的 Apache 2.2 Web 服务器(在 Windows 上运行)上运行。有多个 ASP.NET 虚拟主机正在运行,尝试添加另一个。MVC2 有默认页面(如 MVC 的第一个版本所具有的 default.aspx)。我尝试对配置进行各种更改:注释掉“DirectoryIndex”,将其更改为“/”。将“ASPNET”设置为“Virtual”,不会加载首页,总是得到:“403 禁止访问,您无权访问此服务器上的 /。”

以下是我的 http.conf:

LoadModule aspdotnet_module "modules/mod_aspdotnet.so"
AddHandler asp.net asax ascx ashx asmx aspx axd config cs csproj licx rem resources resx soap vb vbproj vsdisco webinfo

<IfModule aspdotnet_module> 

 # Mount the ASP.NET /asp application
 #AspNetMount /MyWebSiteName "D:/ApacheNET/MyWebSiteName.com"
 Alias /MyWebSiteName" D:/ApacheNET/MyWebSiteName.com"

 <VirtualHost *:80>
 DocumentRoot "D:/ApacheNET/MyWebSiteName.com"
 ServerName www.MyWebSiteName.com
 ServerAlias MyWebSiteName.com
 AspNetMount / "D:/ApacheNET/MyWebSiteName.com"

# Other directives here
  <Directory "D:/ApacheNET/MyWebSiteName.com">
    Options FollowSymlinks ExecCGI
    AspNet All
   #AspNet Virtual Files Directory
    Order allow,deny
    Allow from all
    DirectoryIndex default.aspx index.aspx index.html
   #default the index page to .htm and .aspx
  </Directory>
 </VirtualHost>

 # For all virtual ASP.NET webs, we need the aspnet_client files
 # to serve the client-side helper scripts.
 AliasMatch /aspnet_client/system_web/(\d+)_(\d+)_(\d+)_(\d+)/(.*) "C:/Windows /Microsoft.NET/Framework/v$1.$2.$3/ASP.NETClientFiles/$4"

 <Directory "C:/Windows/Microsoft.NET/Framework/v*/ASP.NETClientFiles">
   Options FollowSymlinks
   Order allow,deny
   Allow from all
 </Directory>

</IfModule>

有人使用 mod_aspdotnet 模块在 Apache 上成功运行过 Microsofts MVC2(或 MVC 的第一个版本)吗?谢谢!

答案1

在 mod_aspdotnet 上启用 MVC 应用要容易得多。如果您只需添加

SetHandler asp.net

到您的目录部分,以便强制所有请求通过模块。它的行为就像 IIS 中的通配符映射。因为这将处理全部请求,您需要通过添加如下位置部分来排除非 .Net 内容:

<Location ~ "^/MyWebSiteName/Content/.*"> SetHandler none </Location>

您的 Content 目录包含所有图像文件、css 等。或者,您可以编写规则以匹配文件扩展名列表,但我发现这更容易。这样做的额外好处是您不必重新编码您的应用程序。您可能遇到的另一个问题是使用 MVC2 时,您可能没有 default.aspx 占位符来处理您的根请求。要处理这个问题,请使用 mod_rewrite 并添加:

  RewriteEngine On
  RewriteBase /MyWebSiteName/
  RewriteRule ^$ Home [R=301]

我的目录配置强制将 / 请求重定向到 Home 控制器。

答案2

答案

我运行的是 XP Home,Apache 2.2.10,带有 NOSSL 和 MS SQL 2008 Express (Advanced)。如果你想知道如何让 ASP.NET 在 Apache 上运行,请执行以下操作首先。我对 Web 服务器上的 MVC 的了解来自(http://www.asp.net/learn/mvc/tutorial-08-cs.aspx)。(我是新用户,无法提交超过一个超链接,自己想想吧)我选择 .mvc 扩展名选项。以下是我的配置:

LoadModule aspdotnet_module "modules/mod_aspdotnet.so"
AddHandler asp.net mvc asax ascx ashx asmx aspx axd config cs csproj licx rem resources resx soap vb vbproj vsdisco webinfo
<IfModule aspdotnet_module> 
 Alias /MyWebSite"D:/ApacheNET/MyWebSite.com"

<VirtualHost *:80>
 DocumentRoot "D:/ApacheNET/MyWebSite.com"
 ServerName www.MyWebSite.com
 ServerAlias MyWebSite.com
 AspNetMount / "D:/ApacheNET/MyWebSite.com"

# Other directives here
  <Directory "D:/ApacheNET/MyWebSite.com">
    Options FollowSymlinks ExecCGI
    #AspNet Files Directories Virtual
    AspNet All
    Order allow,deny
    Allow from all
    DirectoryIndex index.html
    #default the index page to .htm and .aspx
  </Directory>
</VirtualHost>

添加MVCC到上面的 AddHandler。我在 global.aspx 中更改了默认路由:

routes.MapRoute(
                "HomeIndex",
                "default.mvc", 
                new { controller = "Home", action = "Index" }
                );

routes.MapRoute(
                "Default",
                "{controller}.mvc/{action}/{id}",
                new { action = "Index", id = "" }
                );

然后我创建了一个 index.html 文件,将传入的根访问者重定向到 default.mvc。就是这样。

相关内容