27cm
@27cm
TODO: Написать статус

Как работает htaccess ZendSkeletonApplication?

Пытаюсь понять, как работает файл .htaccess ZendSkeletonApplication
https://github.com/zendframework/ZendSkeletonAppli...

Если с первой его частью всё понятно, то вот со второй - наоборот.
# The following rewrites all other queries to index.php. The 
# condition ensures that if you are using Apache aliases to do
# mass virtual hosting, the base path will be prepended to 
# allow proper resolution of the index.php file; it will work
# in non-aliased environments as well, providing a safe, one-size 
# fits all solution.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]


Буду признателен за подробный ответ.
  • Вопрос задан
  • 2432 просмотра
Решения вопроса 1
@ugodrus
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]

Короче это хитронаворочанная конструкция для запросов типа /directory/application/method собранная для вычисления основной директории запуска.
В первой строчки сам pattern ^(/директория)(используемый метод)::{ссылка на используемый метод из этого же регулярника} и модификация изначального %{REQUEST_URI} суффиксом.
Во второй строке ^(/директория) записывается в окружение
В третьей запрос перенаправляется в /directory/index.php
Хотя смысла во второй строке не вижу. Более уместно было бы как-то передавать скрипту используемый метод в виде отдельной переменной.
Я бы проще обошелся:
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*)$ %1index.php [NC,L]

Хотя (может быть я и не прав) можно сделать так : RewriteCond %{REQUEST_URI}::$2 ^(/.+/)(.+)::\2$
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы