Apache - «динамическое» правило перезаписи - PullRequest
1 голос
/ 09 июня 2010

Я работаю над проектом Zend Framework, где натолкнулся на небольшую проблему. Проблема возникает из-за того, что модули являются гражданами 2-го класса в Zend Framework. В моем проекте я хотел бы, чтобы у каждого модуля была папка, содержащая файлы, к которым необходимо обращаться извне - такие файлы, как таблицы стилей, javascripts и изображения.

Теперь, как это сделать. В проекте Zend Framework у меня есть структура папок, которая выглядит следующим образом:

  • применение /
    • модули /
      • moduleOne /
        • общественности /
          • stylesheet.css
      • moduleTwo /
      • moduleThree /
  • публичный /
    • index.php

Стандартный файл .htaccess, расположенный в папке public / , содержит:

SetEnv APPLICATION_ENV development
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Как это работает, так это то, что apache DocumentRoot проекта является папкой public / . Все запросы перенаправляются через файл index.php , в который вступает компонент маршрутизатора Zend Framework. Теперь я ни в коем случае не эксперт ни по Apache, ни по mod_rewrite, так что извините, если это просто глупо. Я предполагаю, что я реализую дополнительный шаг в существующем правиле перезаписи, чтобы, если я запрашиваю http://project/public/moduleOne/stylesheet.css, он, например, преобразуется в / var / www / project / application / modules / moduleOne / public /stylesheet.css.

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

Это вообще возможно или у кого-то есть лучшее предложение?

Спасибо за ваше время Кристиан Расмуссен

1 Ответ

0 голосов
/ 09 июня 2010

С помощью только mod_rewrite вы не можете запрашивать файлы вне корня документа.Поэтому единственное решение - использовать символическую ссылку, расположенную в корневом каталоге документа и указывающую на каталог модулей.

...