Пользовательская логика маршрутизации и обслуживание статического контента при наличии корня документа в родительском каталоге общедоступного каталога?

avatar
user1785721
21 мая 2012 в 01:05
321
1
0

Я расширяю Zend_Controller_Router_Route_Abstract в Zend Framework, чтобы добавить в свое приложение настраиваемую маршрутизацию. Мой метод match возвращает false в случаях, когда он определяет, что путь запроса не является одним из путей, которые он должен обработать. Таким образом, с путями, такими как пути к статическим ресурсам, мой собственный класс маршрутизации возвращает false, а маршрутизатор модуля по умолчанию позаботится о.

Моя проблема в том, что все работает нормально, поскольку у меня есть корень документа моего сайта, указывающий на мой общедоступный каталог. Когда я меняю корень документа на каталог в общей папке (родительский каталог), появляется следующая ошибка при попытке запросить статический ресурс, например http://mysite.com/css/global.css :

Произошла ошибка Страница не найдена Информация об исключении:

Сообщение: Указан недопустимый контроллер (css) Трассировка стека: Трассировка стека: ....

Параметры запроса:

  array (   'controller' => 'css',   'action' => 'global.css',   'module' => 'default', )

Это всего лишь часть сообщения, другая часть не имеет значения.

У меня вопрос, как я могу решить эту проблему? Как я могу использовать свою собственную логику маршрутизации и обслуживать статический контент, имея корень документа в родительском элементе общедоступного каталога?

Здесь .htaccess, который я использую, когда корень документа не указывает на общедоступный каталог:

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]

Источник

Ответы (1)

avatar
Tomáš Fejfar
21 мая 2012 в 12:08
1

Вы не должны загружать статические файлы из PHP. Это означает, что вы должны использовать:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
user1785721
21 мая 2012 в 15:30
0

Это не работает. Когда я помещаю файл .htaccess с этим содержимым в корень моего документа и получаю доступ к mysite.com, я просто получаю список каталогов. С указанным мной файлом .htaccess я получаю правильный html, но проблема в том, что css, js и изображения не отображаются из-за моей настраиваемой логической маршрутизации. Я не обслуживаю файлы статики, я запускаю приложение Zend Framework, которое обслуживает статический контент, но имеет особенность иметь настраиваемую маршрутизацию.

Tomáš Fejfar
21 мая 2012 в 17:49
0

Я надеялся, что вы поймете, что вам, очевидно, нужно изменить часть index.php, но первая часть (-s, -l -d и следующая строка) должна позволить вызвать /public/css/style.css. ..