Ваша проблема в том, что ваше имя псевдонима и физический путь совпадают, поэтому apache не знает, какой из них обслуживать.
ПРИМЕЧАНИЕ: я даю ответ, основываясь на общей конфигурации Apache2, а не на mod_mono, возможно, mod_mono что-то делает для предотвращения этого, я не устанавливал приложения MVC в поле * nix раньше: -)
В любом случае ...
если вы посмотрите на ваши конфигурации пути, у вас есть ...
/Library/WebServer/vhosts/api
/Library/WebServer/vhosts/api/gamecenter
/Library/WebServer/vhosts/api/gamecenter-stage
без ваших псевдонимов, они уже определяют пути, которые вы пытаетесь отобразить.
/Library/WebServer/vhosts/api = /
/Library/WebServer/vhosts/api/gamecenter = /gamecenter
/Library/WebServer/vhosts/api/gamecenter-stage = /gamecenter-stage
Тогда вы говорите Apache, что
/ = /
/gamecenter = /gamecenter
/gamecenter-stage = /gamecenter-stage
Когда Apache пытается доставить контент, если нет файлового субфикса или существующего слеша (как в последних 2), он автоматически добавит в папку префикс с /, а затем выдаст перенаправление (я полагаю, 306), по сути говоря, сообщив браузеру: перенаправление из EG:
/gamecenter to /gamecenter/
С псевдонимом на месте, чтобы сказать ему, что Псевдоним ... находится в местоположении x, он должен попытаться принять решение, чтобы служить
/gamecenter/
или
/gamecenter/gamecenter/../ (Because in terms of folder structure the alias name is 1 folder level down in the web than it is physically)
и в конечном итоге запутывается, и то же самое делает то, что делает любой настроенный виртуальный хост, когда он не может определить путь, и это возвращает корень веб-сайта.
Как я уже сказал, это обычное поведение Nache-MONO Apache, возможно, что mod_mono может каким-то образом изменить конвейер обработки, что может изменить это поведение.
Я бы порекомендовал разделить это на 3 виртуальных хоста, что вы можете очень легко сделать даже на одном IP.
Первое, что вам нужно сделать, это где-нибудь в вашем главном конфигурационном файле Apache, иметь
Listen 9005
заявление. Это заставит ВСЕ виртуальные экземпляры прослушивать этот порт, а также любой другой настроенный порт EG: 80
Затем убедитесь, что у вас есть перехват всех виртуальных хостов по умолчанию, он будет перехватывать любое имя сервера, не назначенное в другом месте:
<VirtualHost *>
DocumentRoot "/some/folder/where/the/default/is/"
#Followed by other server directives. NOTE: there is NO servername line
</VirtualHost>
Как только вы это настроите, перейдите на свой поддомен "api"
<VirtualHost *>
ServerName api
DocumentRoot "/Library/WebServer/vhosts/api/"
#Other required directives here
</VirtualHost>
В этот момент я собираюсь сделать паузу, чтобы обсудить ваше доменное имя. Если это внутренняя тестовая система (что, я подозреваю, так и есть), то вам будет проще работать с виртуальными доменами, если вы установите DNS-сервер на своем компьютере, а затем установите его в качестве основного домена, используя частный адрес внутренней сети.
EG:
Создайте корневую зону и назовите ее «mydevnetwork.local»
затем добавьте к нему имена машин:
EG: если ваш компьютер называется devpc1, создайте IP-адрес для "devpc1.mydevnetwork.local" и присвойте вашему компьютеру статический IP-адрес EG: 192.168.50.1
Затем установите псевдоним для этого, так что
api.mydevnetwork.local = devpc1.mydevnetwork.local
У меня нет места для полной публикации по настройке DNS, но, надеюсь, вы поняли идею.
Как только вы настроите DNS (или как минимум записи файла хоста), вашими виртуальными хостами под Apache станет действительно легко управлять:
<VirtualHost *>
ServerName api.mydevnetwork.local
DocumentRoot "/Library/WebServer/vhosts/api/"
#Other required directives here
</VirtualHost>
и его легко переместить на другой компьютер, если он вам тоже понадобится.
Вы можете настроить остальные виртуальные хосты почти таким же образом
<VirtualHost *>
ServerName gamecenter.mydevnetwork.local
DocumentRoot "/Library/WebServer/vhosts/api/gamecenter/"
#Other required directives here
</VirtualHost>
<VirtualHost *>
ServerName gamecenter-stage.mydevnetwork.local
DocumentRoot "/Library/WebServer/vhosts/api/gamecenter-stage/"
#Other required directives here
</VirtualHost>
Обратите внимание, что я устанавливаю пути, которые будут такими же, как у вас выше, и даже если это сработает, я настоятельно рекомендую вам предоставить каждому отдельную папку, обычно я делаю что-то вроде:
wwwroot
api.mydevnetwork.local
htdocs <-- Web files go here
cgi-bin <-- cgi scripts go here and it's mapped to /cgi-bin/
logs <-- logs here
access <-- htpasswd files here
Будем надеяться, что если вышеизложенное не является полным решением, вы можете, по крайней мере, получить от него дальнейшие идеи исследования.