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

Как интегрировать систему форумов PHP с новым сайтом Django

Я как раз собираюсь запустить новый сайт Django (RedHat EL4, Apache 2.0.52, Django 1.1, mod_wsgi), перейдя с базового сайта static-html и php. В настоящее время Django обрабатывает каждый запрос на новом сайте, начиная с корня сайта (т.е. mydomain.com/ обрабатывается Django).

На старом сайте был создан форум PhpBB по адресу mydomain.com/forum/. Я пытаюсь выяснить, как (или если) я могу заставить систему форумов жить в том же месте на новом сайте. Итак, все, что находится под mydomain.com/forums/, обрабатывается PhpBB, а все остальное - Django.

Мне кажется, что директива Apache 'Location' - это инструмент, который нужно использовать, но я не получаю достаточно конкретных советов от документации Apache и Google. Я достаточно хорошо знаком с conf-файлами Apache, но раньше мне не приходилось делать этого. Спасибо за любые предложения.

У меня есть статические файлы, обслуживаемые с моего хоста, с помощью следующего в моей конфигурации apache:

  Alias /media /sites/mysite.org/www/media
  <Location /media>
    Order allow,deny
    Allow from all
  </Location>

При этом Apache обрабатывает псевдоним еще до того, как он попадает в Django. Я предполагаю, что вам просто нужно включить php, чтобы он работал с этим каталогом.

ОБНОВИТЬ Согласно комментарию Грэма ниже. Посмотрите раздел "Что использовать, когда" в http://httpd.apache.org/docs/current/sections.html#page-header

Что использовать Когда

Выбор между контейнерами файловой системы и контейнерами веб-пространства на самом деле довольно прост. При применении директив к объектам, находящимся в файловой системе, всегда используйте или. При применении директив к объектам, которые не находятся в файловой системе (например, веб-странице, созданной из базы данных), используйте.

Важно никогда не использовать при попытке ограничить доступ к объектам в файловой системе. Это связано с тем, что множество различных местоположений веб-пространств (URL-адресов) могут отображаться в одном и том же местоположении файловой системы, что позволяет обойти ваши ограничения. Например, рассмотрим следующую конфигурацию:

<Location /dir/>
Order allow,deny
Deny from all
</Location>

Это отлично работает, если запрос предназначен для http://yoursite.example.com/dir/. Но что, если вы используете файловую систему без учета регистра? Тогда ваше ограничение можно будет легко обойти, запросив http://yoursite.example.com/DIR/. Директива, напротив, будет применяться к любому контенту, обслуживаемому из этого места, независимо от того, как он вызывается. (Исключением являются ссылки файловой системы. Один и тот же каталог может быть размещен в нескольких частях файловой системы с помощью символических ссылок. Директива будет следовать за символической ссылкой без сброса имени пути. Поэтому для наивысшего уровня безопасности символические ссылки должны быть отключено соответствующей директивой Options.)

Если вы, возможно, думаете, что ничего из этого не применимо к вам, потому что вы используете файловую систему с учетом регистра, помните, что есть много других способов сопоставить несколько местоположений веб-пространства с одним и тем же местоположением файловой системы. Поэтому вы всегда должны использовать контейнеры файловой системы, когда можете. Однако есть одно исключение из этого правила. Размещение ограничений конфигурации в разделе совершенно безопасно, потому что этот раздел будет применяться ко всем запросам независимо от конкретного URL-адреса.