Форум программистов, компьютерный форум, киберфорум
Apache, htaccess
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 04.07.2022
Сообщений: 2

Полезное поведение правила RewriteCond %{REQUEST_FILENAME} !-f

04.07.2022, 23:34. Показов 497. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В любом фрэймворке или CMS стало правилом направлять все запросы в одну точку входа index.php
Следующие правила mod_rewite встречаются везде, эти - из laravel:
Code
1
2
3
4
    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
Смысл понятен - если такой директории нет или если такого файла нет - отправить все в index.php
Мне понадобилось на одном виртуальном хосте разместить второй фрэймворк, и я положил в корень рядом другой файл index2.php
Обращаться к нему решил так:

http://example.com/index2.php/foo/bar

Я думал мне придется добавить правило в htaccess, которое будет разруливать запросы по индексам но Бинго! Этого не потребовалось!

Запрос /index2.php/foo/bar отправлялся в index2.php, что мне и было нужно. ПОлучается, что mod_rewrite проверяет наличие пути не по целому совпадению, а по очереди перебирая все части пути и как только совпадение находится, отправляет запрос в этот файл. Поскольку index2.php реально существовал, то запрос отправился по нужному адресу.

Меня смущало только то, что нигде в документации я такого поведения RewriteCond %{REQUEST_FILENAME} !-f не встречал
Возможно потому, что именно так себя ведет не апач, а nginx. Буду благодарен за помощь в поиске причин этого полезного поведения. Я хочу использовать эту фичу в продакшене и хотелось бы почитать документацию, где такое поведение описано.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.07.2022, 23:34
Ответы с готовыми решениями:

Mod_rewrite REQUEST_FILENAME
Добрый день, хотел бы попросить написать условие для mod_rewrite Есть 2 файла, которые скачиваются подряд, необходимо условие чтобы если...

Не срабатывают параметры request_filename
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^u({16})$ index.php?url_id=$1 ...

%{REQUEST_FILENAME} для определенной директории
Имеется в принципе стандартный .htaccess файл RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond...

4
0 / 0 / 0
Регистрация: 04.07.2022
Сообщений: 2
05.07.2022, 21:17  [ТС]
запросил у хостера конфиг nginx
Code
1
2
3
4
5
6
7
8
9
10
11
location / {
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @fallback;
        }
location ~* ^.+\.(jpg|jpeg|webp|gif|png|ico|svg|pdf|djvu|js|css|mp3|mp4|webm|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|woff|woff2|eot|ttf|docx?|xlsx?)$ {
            try_files $uri $uri/ @fallback;
        }
location / {
            try_files /does_not_exists @fallback;
        }
    }
И выходит что nginx тут ни при чем. Его первая локация сработала бы, если бы мой урл заканчивался на php, либо php8, либо phtml, а урл /index2.php/foo/bar...
Выходит все таки апач молодец? но молчит. Нигде не могу найти описания такого поведения...
0
Невнимательный
 Аватар для ft4l
3107 / 1282 / 358
Регистрация: 08.02.2013
Сообщений: 7,518
Записей в блоге: 2
05.07.2022, 21:37
Цитата Сообщение от Anrol Посмотреть сообщение
Нигде не могу найти описания такого поведения
AcceptPathInfo Directive
Description: Resources accept trailing pathname information
Syntax: AcceptPathInfo On/Off/Default
Default: AcceptPathInfo Default
Context: server config, virtual host, directory, .htaccess
Override: FileInfo
Status: Core
Module: core

This directive controls whether requests that contain trailing pathname information that follows an actual filename (or non-existent file in an existing directory) will be accepted or rejected. The trailing pathname information can be made available to scripts in the PATH_INFO environment variable.

For example, assume the location /test/ points to a directory that contains only the single file here.html. Then requests for /test/here.html/more and /test/nothere.html/more both collect /more as PATH_INFO.

...
Default
The treatment of requests with trailing pathname information is determined by the handler responsible for the request. The core handler for normal files defaults to rejecting PATH_INFO requests. Handlers that serve scripts, such as cgi-script and isapi-handler, generally accept PATH_INFO by default.
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
07.07.2022, 08:37
Цитата Сообщение от Anrol Посмотреть сообщение
Буду благодарен за помощь в поиске причин этого полезного поведения.
Польза от такого поведения очень сомнительна. Сейчас используется редко. Возможны даже проблемы с безопасностью.
0
Невнимательный
 Аватар для ft4l
3107 / 1282 / 358
Регистрация: 08.02.2013
Сообщений: 7,518
Записей в блоге: 2
07.07.2022, 22:40
Цитата Сообщение от Phantom-84 Посмотреть сообщение
используется редко
Не так уж и редко это включено кмк.
Например для Yet Another Framework (Yaf) рекомендуют в комментах включить для nginx+fpm
https://www.php.net/manual/ru/yaf.tutorials.php
When you use nginx & php-fpm config for yaf frame, you must set PATH_INFO support in nginx. Otherwise, it will not work.
...
Со времён обычного использования CGI немного подзабросили использовать PATH_INFO
Но в стандартах оно есть и насколько возможно безопасные реализации присутствуют.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.07.2022, 22:40
Помогаю со студенческими работами здесь

Rewriterule и RewriteCond
Есть сайт Главная страница доступна по 3-м адресам http://mysite.org http://mysite.org/index.php http://mysite.org/index.php?c=1 ...

htaccess RewriteCond
Здравствуйте! Помогите пожалуйста составить правило в htaccess, которое будет проверять начие определенных слов в запросе. Например,...

Не работает RewriteCond
Имею локальный веб-сервер (Debian, Apache2.2.22) и настроенный виртуальных хост person.in.local В корне хоста создал файл .htaccess с...

Дополнительные ПРАВИЛА этого подраздела, Правила касающиеся обсуждения ремонта техники Electrolux
В разделе стиралок висит свод правил для всех разделов, в том числе и для этого. Там есть правило, касающееся именно этого раздела стиралок...

Как составить RewriteCond
Почему оба правила ниже редиректят адрес вида mysite.ru/js/ несмотря на то, что во втором стоит отрицание сравнения. RewriteCond...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru