Мы используем apache, mod_php и mod_wsgi для обслуживания центрального сайта WordPress, а некоторые пути вместо этого работают на Django, поэтому, например, эти страницы могут работать на Wordpress:
oursite.com/
oursite.com/video/
но эти URL-адреса могут быть на базе Django:
oursite.com/our-cool-django-app/
oursite.com/schedule/
Прямо сейчас мы используем длинный список WSGIScriptAlias для сопоставления определенных путей с Django. Это утомительно и трудоемко.
Итак, есть ли способ настроить такие вещи, чтобы:
Меня особенно интересует решение Apache, но я рассмотрю альтернативы.
Читать:
Используйте метод AddHandler / mod_rewrite.
Если URL-адрес не может быть обработан вашим приложением PHP из-за отсутствия соответствующего файла .php, он попадет в ваше приложение WSGI.
Это ответ на ваше увлечение альтернативами.
Я разместил Django и WordPress в одном домене за Nginx, используя php5-fpm
для WordPress и полагаясь на Nginx's X-Accel-Redirect
для возврата неопределенных URL-адресов в WordPress вверх по течению.
Конфигурация Nginx начинается с известных шаблонов, с которыми должен работать WordPress: индексная страница, несколько страниц с контентом верхнего уровня или разделов верхнего уровня и / или шаблон для сообщений в блогах. Это означает, что большинство URL-адресов WordPress можно перехватить с помощью дюжины или меньшего количества шаблонов URL.
Все остальное направляется в восходящий поток Django.
А как насчет новых страниц или изменений на сайте WordPress? Вместо того, чтобы обновлять шаблоны URL для каждой добавленной страницы или раздела WordPress, приложение Django использует собственный обработчик 404 для перенаправления запроса в восходящий поток WordPress.
def page_not_found(request):
"""
A 404 view that redirects to the WordPress installation.
"""
try:
new_url = Redirect.objects.get(old_path=request.get_full_path())
except Redirect.DoesNotExist:
pass
else:
return redirect(new_url.new_path)
if not settings.WORDPRESS_REDIRECT:
return render(request, "404.html", {})
response = HttpResponse()
response['X-Accel-Redirect'] = '/wordpress/'
return response
Перенаправляя запросы, промежуточное программное обеспечение перенаправления не «видит» никаких ошибок 404, поэтому, если вы хотите использовать функцию перенаправления, ее следует добавить сюда. В /wordpress/
Расположение определяется как внутреннее расположение в конфигурации Nginx.
location /wordpress/ {
internal;
try_files $uri $uri/ /index.php;
}
Я немного больше написал об использовании X-Accel-Redirects для этой цели, хотя я понимаю, что это не отвечает на конкретный вопрос.
Надеюсь, это даст вам некоторые идеи о том, что вы могли бы использовать X-Sendfile
сделать что-то подобное с mod_php
и mod_wsgi
.