尝试让 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。就是这样。