
Сблъсках се с интересен частен случай, сайта domain.tld се премества на сървър с nginx и php-fpm, сайта е правен на Kohana и всички заявки към несъществуващи файлове трябва да водят до domain.tld/index.php, от където вече Kohana си прави логиката с MVC моделите и пермалинковете.
В директорията domain.tld/blog/ обаче има инсталиран Wordpress блог, който ползва pretty permalinks и не е интегриран по никакъв начин с Kohana, съответно си ползва собствена логика контролирана от domain.tld/blog/index.php, към където и съответно пък трябва да отиват заявките към него.
Проблема обаче е, че Nginx не ползва .htaccess файлове и правилата трябва да са в общия конфигурационен файл на сайта. Логичното решение беше да пробвам да разделя правилата с location /blog { } блок, обаче така не стигнах до успешно решение, понеже когато двете системи се помириха частично, Nginx полудя и започна да вади сървърни грешки на определени заявки, които се отнасят до файлове в под директориите на /blog например wp-admin и wp-content и съответно техните под директории.
Всичко щеше да е песен ако блога беше в отделен под домейн със съответно отделен виртуален хост, например blog.domain.tld, обаче случая не беше такъв, така че за да запазя структурата на сайта стигнах то следното решение:
За да разгранича заявките между Kohana и Wordpress включих една проста проверка на съдържанието на $uri преди да подам всичко към Kohana, като ако съдържаше стринг 'blog' заявката се пренасочва към Wordpress и проверките спират. Същият метод го изпробвах успешно и със сайт правен на CodeIgniter, а попринцип би трябвало да работи и при други подобни фреймуорци.
location / {
root /www/domain.tld;
index index.php index.html;
if (-f $request_filename) {
break;
}
if (-d $request_filename) {
break;
}
if ($uri ~* 'blog' ) {
rewrite . /blog/index.php last;
break;
}
if (!-e $request_filename) {
rewrite . /index.php last;
}
}