Настройка ASP.NET MVC2 на Apache 2.2 с использованием mod_aspdotnet

Попытка заставить веб-сайт Microsoft MVC2 работать на веб-сервере Apache 2.2 (работающем в Windows), который использует модуль mod_aspdotnet. Запустите несколько виртуальных хостов ASP.NET, пытаясь добавить другого. MVC2 не имеет страницы по умолчанию (как и в первой версии MVC, например, default.aspx). Я пробовал различные изменения в конфигурации: закомментировал "DirectoryIndex", изменил его на "/". Установите для "ASPNET" значение "Виртуальный", первая страница не будет загружаться, всегда выдается: "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>

Кто-нибудь успешно запускал Microsoft Apache (или первую версию MVC) на Apache с модулем mod_aspdotnet? Спасибо!

2 ответа

Решение

Включение приложений MVC в mod_aspdotnet намного проще, чем это. Если вы просто добавите

SetHandler asp.net

в ваш раздел каталога, чтобы форсировать все запросы через модуль. Он ведет себя как подстановочный знак в IIS. Так как это обработает все запросы, вы захотите сделать исключение для контента, не относящегося к.Net, добавив раздел местоположения, подобный следующему:

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

Если в вашем каталоге содержимого находятся все ваши файлы изображений, css и т. Д. В качестве альтернативы вы можете написать правило, соответствующее списку расширений файлов, но я считаю, что это проще. Дополнительным преимуществом этого является то, что вам не нужно перекодировать свои приложения. Еще одна проблема, с которой вы можете столкнуться, связана с MVC2, у вас может не быть заполнителя по умолчанию default.aspx для обработки ваших корневых запросов. Для решения проблемы используйте mod_rewrite и добавьте:

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

в конфигурацию моего каталога, которая принудительно перенаправляет запрос / на контроллер Home.

Ответ

Я использую XP Home с Apache 2.2.10 с NOSSL и MS SQL 2008 Express (Advanced). Если вы хотите узнать, как заставить ASP.NET работать на Apache, сделайте это в первую очередь. То, что я обнаружил о 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>

Добавлен MVC для 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. Вот и все.

Другие вопросы по тегам