У меня есть приложение Django, которое обрабатывает «/ admin /» и «/ myapp /». Все остальные запросы должны обрабатываться Apache.
Я пробовал использовать LocationMatch, но тогда мне пришлось бы написать отрицательное регулярное выражение. Я пробовал WSGIScriptAlias с префиксом / admin /, но затем wsgi_handler получает запрос с отключенным / admin / part.
Есть ли более чистый способ заставить mod_wsgi обрабатывать только определенные запросы?
Использование:
WSGIScriptAliasMatch ^/(admin|myapp) /some/path/django.wsgi/$1
Это должно сохранить SCRIPT_NAME как соответствующий корень веб-сайта, чтобы urls.py по-прежнему работал для записей, начинающихся с admin и myapp.
Использование псевдонима в моей конфигурации apache всегда помогало мне:
Alias /media /sites/mysite.org/www/media
<Location /media>
Order allow,deny
Allow from all
</Location>
Он обрабатывается до того, как mod_wsgi приблизится к нему.
Из книги django http://www.djangobook.com/en/beta/chapter21/:
Если вы развертываете Django в подкаталоге, то есть где-нибудь глубже, чем «/», Django не удалит префикс URL из ваших шаблонов URL. Итак, если ваша конфигурация Apache выглядит так:
<Location "/mysite/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonDebug On
</Location>
Все ваши шаблоны URL должны начинаться с "/ mysite /". По этой причине мы обычно рекомендуем развертывать Django в корне вашего домена или виртуального хоста.