Главная  /  Правка  /  История  /   /  Область пользователей

Запуск CppCMS-приложения в корне Web-сервера

Введение

В большинстве примеров этого wiki приложения запускаются из каких-либо простых URL — определенных именем скрипта, например для примера "Hello World" приложение запускается из URL "/hello", приложение доски объявлений запускается из URL "/mb".

Это просто и удобно - все статические файлы предоставляются как есть, а URL приложения использует свои собственные пути, например:

Статические файлы:

/media/style.css

Приложение:

/mb
/mb/tree/1
/mb/comment/10 

, где "/tree/1" и "/comment/10" подпути приложения.

Однако, часто пожет требоваться запуск приложения из "корня" web-сервиса так, чтобы главным URL был "/".

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

Т.о. чтобы это сделать - нужно использовать правила перезаписи URL, существующие в любом современном web-сервере.

Так, если приложение должно стартовать из корня "/" и все медиа-файлы должны предоставляться из директории "/media/", нам бы хотелось оставить URL "/media/*" нетронутым и переписать все другие URL'ы типа "/tree/1" на "/mb.fcgi/tree/1", где "/mb.fcgi" - скрипт вывода.

Т.о. мы должны показать как создать корректные правила перезаписи для web-сервера для обслуживания приложения в корне хоста.

Предполагается что:

См. руководство Запуск CppCMS с Web-серверами.

Правила перезаписи для различных web-серверов

Apache

Потребуется включить mod_rewrite и поместить в раздел <VirtualHost *> следующие правила перезаписи

RewriteEngine On
RewriteRule ^(/media/.*)$ $1 [PT]
RewriteRule ^/(.*)$ /mb.fcgi/$1 [QSA,L]

Все файлы "/media/" будут обслуживаться как есть с файловым флагом [PT], а остальные URL типа /some/url будут отображаться в /mb.fcgi/some/url`

Lighttpd

Потребуется включить mod_rewrite и предоставить следующее правило:

url.rewrite-once = (
  "^(/media/.*)"  => "$1",
  "^/(.*)" => "/mb.fcgi/$1"
)

Обратите внимание на использование директивы rewrite-once - как только правило "^(/media/.*)" выполняется, оно больше не будет перезаписываться.

Nginx

Правило перезаписи, которое должно определяться до обработчика FastCGI следующее:

rewrite  ^(/media/.*)$  $1  last;
rewrite  ^/(.*)$  /mb.fcgi/$1 ;

Примечание: параметр last используется для корня /media/.* для предотвращения последующих замен. Это не делается для корневого URL ^/(.*)$, т.к. FastCGI использует перезапись самостоятельно.

Встраиваемый CppCMS

Секция http.rewrite определяет правила перезаписи URL. Это реализовано в CppCMS начиная с CppCMS 0.99.11.

Секция конфигурации http должна выглядеть как:

"http" : {
  "script" : "/mb.fcgi",
  "rewrite" : [
    { "regex" : "/media(/.*)?", "pattern" : "$0" },
    { "regex" : ".*" , "pattern" : "/mb.fcgi$0" }
  ]
}

Полезные источники

Проект

CppCMS является основой веб-разработки для выполнения ресурсоемких приложений.

Размещение

SourceForge.net Logo

Поддержать проект

CppCMS needs You


Навигация

Главная страница



Валидация CSS | Валидация XHTML 1.0