В документации по Zend Framework 2 и 3 достаточно хорошо описан процесс развёртывания этих фреймворков на сервере. Но, что делать если приложение будет работать на виртуальном хостинге (всё-таки выделенный сервер необходим далеко не всегда)?
Но для начала ответим на вопрос: а,есть ли различия при развёртывании Zend Framework на сервере и «обычном» хостинге?
На самом деле различия есть.
Как известно в случае Zend Framework точка входа в приложение находится в файле index.php в папке public. Вследствие этого чтобы сайт был доступен по положенному ему доменному имени необходимо перенаправление запросов из корневой папки виртуального хоста в папку public.
В документации Zend данное перенаправление задаётся в файле конфигурации виртуального хоста. Но, на виртуальном хостинге доступ к этому файлу отсутствует. Поэтому, единственным способом как-то повлиять на поведение запросов к виртуальному хосту остаётся файл .htaccess.
Самый простой способ реализовать перенаправление в папку public, это прописать правило для расширений файлов. Например, так:
1 2 3 |
RewriteEngine On RewriteRule !\.(css|gif|js|jpg|ico|png|svg|txt)$ public/index.php [L] RewriteRule ^(.*)$ public/$1 [L] |
Однако, может возникнуть ситуация, когда нужное расширение ещё не прописано.
Поэтому более грамотным решением будет сделать перенаправление при помощи директивы RewriteCond, как показано ниже.
1 2 3 4 5 6 7 8 9 |
RewriteEngine On RewriteRule ^\.htaccess$ - [F] RewriteCond %{REQUEST_URI} ="" RewriteRule ^.*$ /public/index.php [NC,L] RewriteCond %{REQUEST_URI} !^/public/.*$ RewriteRule ^(.*)$ /public/$1 RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^.*$ - [NC,L] RewriteRule ^public/.*$ /public/index.php [NC,L] |
Таким образом, все без исключения запросы будут корректно перенаправляться в папку public.
Добавить комментарий