Ответ 1
ваша проблема заключается в том, что ваше псевдоним и физический путь являются одним и тем же, поэтому 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), он будет автоматически, подстройте папку с /then выпустите перенаправление (как я полагаю, 306), по существу говоря браузеру перенаправлять из EG:
/gamecenter to /gamecenter/
С помощью псевдонима, чтобы сказать, что Alias ... находится в точке 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)
и заканчивается тем, что запутывается, и делает то же, что настроен любой виртуальный хост, когда он неспособен разрешить путь и возвращает корень сайта.
AS я SAY, однако, это общее поведение NAN-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>
Обратите внимание на iv'e, чтобы пути были такими же, как и у вас выше, и хотя это будет работать, я настоятельно рекомендую вам дать каждому свой уникальный каталог, я обычно делаю что-то вроде:
wwwroot
api.mydevnetwork.local
htdocs <-- Web files go here
cgi-bin <-- cgi scripts go here and it mapped to /cgi-bin/
logs <-- logs here
access <-- htpasswd files here
Надеюсь, если выше это не полное решение, вы можете хотя бы получить от него дополнительные идеи исследования.