Поскольку псевдонимы и WSGIScriptAlias имеют разные уровни приоритета, вы не можете создать многоуровневый перекрывающийся набор URL-адресов более двух уровней, который чередуется между их использованием. Решение состоит в том, чтобы использовать директивы Alias / AliasMatch для всех вложенных URL-адресов, чтобы они оценивались с одинаковым уровнем приоритета. Можно по-прежнему использовать WSGIScriptAlias для корня сайта.
Таким образом, попробуйте использовать следующую директиву в таком порядке, чтобы большинство вложенных шаблонов URL было раньше, чем внешние URL.
<VirtualHost *:8080>
#DocumentRoot /var/www/mydomain.com/public
ServerName mydomain.com
ErrorLog /var/www/mydomain.com/logs/apache_error_log
CustomLog /var/www/mydomain.com/logs/apache_access_log common
AliasMatch ^/(media/foo/bar/.*) /var/www/mydomain.com/src/myproject/server/django.wsgi/$1
Alias /media/ /var/www/mydomain.com/public/media/
WSGIScriptAlias / /var/www/mydomain.com/src/myproject/server/django.wsgi
<Directory /var/www/mydomain.com/src/myproject/server>
Options ExecCGI
AddHandler wsgi-script .wsgi
# WSGIApplicationGroup %{GLOBAL}
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/mydomain.com/public/media>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
AliasMatch используется для большинства вложений, так как нам нужно отрегулировать значение SCRIPT_NAME, т. Е. Точку монтирования, видимую приложением Django, так что запрос по-прежнему относится к экземпляру Django, смонтированному в корневом каталоге. Если этого не сделать, шаблоны urls.py не будут работать так, как вы ожидаете для этого суб-URL. Использование AliasMatch и добавление сопоставленного подшаблона в RHS после пути к скрипту с использованием $ 1 достигает этого.
Хотя Django монтируется с помощью двух разных директив, рассчитанное значение SCRIPT_NAME должно быть одинаковым для обоих, поэтому следует использовать один и тот же субинтерпретатор Python. Если по какой-то причине вы считаете, что объем используемой памяти в два раза больше ожидаемого, т. Е. Два экземпляра Django выполняются в разных субинтерпретаторах, вы можете заставить их работать в одном и том же месте, раскомментировав директиву WSGIApplicationGroup выше. Это не должно требоваться, хотя, и если вы считаете, что вам это нужно, лучше зайдите в список рассылки mod_wsgi и можете научить вас, как проверить, правильно ли вы поступаете, а что нет.