Назад | Перейти на главную страницу

Как разрешить mod_wsgi обрабатывать только определенные URL-адреса в Apache?

У меня есть приложение 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 в корне вашего домена или виртуального хоста.