让apache2.2支持aspx的web server(%windows%)

在平时都是php的项目里,普通配置apache就够用了,突然来了一个.net的aspx应用程序网站,很坑的让apache支持aspx,以下则是过程。

首先在apache官方下载win32的apache
http://httpd.apache.org/download.cgi#apache22

在官方Modules专区下载aspx的扩展
http://httpd.apache.org/modules/#mod_aspdotnet

下载完成后,直接安装至apache目录:如d:/server/apache2.2,则安装目录就是d:/server/apache2.2。
安装完成后,你会发现在你的apache的Modules目录里有一个mod_aspdotnet.so的文件。这就代表需要的东西都齐了,剩下就是配置apache2了,使它能顺利支持aspx应用程序类的web网站。

在apache的配置文件httpd.conf的Modules加载项最下面增加如下代码:
去掉#Include conf/extra/httpd-vhosts.conf的注释,启用多域名。

#加载asp.net模块
LoadModule aspdotnet_module "modules/mod_aspdotnet.so"
#如果mod_aspdotnet加载成功
<IfModule mod_aspdotnet.cpp>
              AddHandler asp.net asax ascx ashx asmx aspx axd config cs csproj licx rem resources resx soap vb vbproj vsdisco webinfo
              # For all virtual ASP.NET webs, we need the aspnet_client files
              # to serve the client-side helper scripts.
              AliasMatch ^/(?i)aspnet_client/system_web/(\d+)_(\d+)_(\d+)_(\d+)/(.*) "C:/WINNT/Microsoft.NET/Framework/v$1.$2.$3/ASP.NETClientFiles/$4"
              
              <Directory "C:/WINNT/Microsoft.NET/Framework/v*/ASP.NETClientFiles">
                            Options FollowSymlinks
                            Order allow,deny
                            Allow from all
              </Directory>
</IfModule>

然后在httpd-vhosts.conf增加

<VirtualHost *:80>
	<IfModule mod_aspdotnet.cpp>
			# 加载 ASP.NET 应用,当第一个参数为“/”时为整个虚拟主机都需要支持asp.net;也可以设置为虚拟目录,只要加上虚拟目录名即可,如AspNetMount /dotnet "D:\Apache\Apache2\htdocs\dotnet"
			AspNetMount / "D:\web\aspx"
	
			# 设置应用asp.net的虚拟目录,当整个虚拟主机都需要支持asp.net时不要设
			#Alias /dotnet "$Apache_home\htdocs\dotnet"
	
			# 允许 asp.net scripts 执行以下目录
			<Directory "D:\web\aspx">
						  Options FollowSymlinks ExecCGI
						  Order allow,deny
						  Allow from all
			</Directory>
	</IfModule>
	ServerAdmin hkshadow@sina.com
	DocumentRoot "D:\web\aspx"
	ServerName aspx.mudbest.com
	ErrorLog "logs/aspx.mudbest.com-error.log"
	CustomLog "logs/aspx.mudbest.com-access.log" common	
</VirtualHost>

这个设置是没有配置虚拟主机的设置,Apache默认的主机根目录是htdocs,你在应用中要把$Apache_home改成Apache安装目录。

增加测试页面 index.aspx

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml"; >
<head runat="server">
    <title>Hello World! - mod_aspdotnet</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <% Response.Write("<h1>Hello World!</h1>")%>
    </div>
    </form>
</body>
</html>

试运行看看结果?
^-^ -> hello word…
说明你的配置是正确的,现在你可以在Apache中使用ASP.Net了。

* 注意:由于apache本身对于url的目录和文件名是大小写敏感的,所以asp.net的虚拟目录必须要注意大小写,否则访问的时候不会出错,不过将会找不到任何的文件,就像访问一个空的目录一样。除了虚拟目录名外,由于其它的aspx文件是mod_aspdotnet模块载入的,所以又仍然是非大小写敏感的。