php fpm mod rewrite

Переезд сайта на FastCGI (nginx + php-fpm)

Данная статья посвящена оптимизации сайтов, а именно изменению работы PHP на FastCGI (nginx + php-fpm). Это необходимо, если Вы используете режим FastCGI (как модуль apache), CGI.

Если Вы используете режим LSAPI на нашем обычном виртуальном хостинге, то он также является достаточно производительным. Для использования FastCGI (nginx + php-fpm) необходимо заказать линейку мощных тарифов, подходящих для работы на любых CMS.

Внимание! Для перевода сайта на CMS WordPress, Joomla, OpenCart, Bitrix необходимы дополнительные действия, и сейчас мы их разберем.

Внимание! Данный мануал подходит для VPS серверов с панелью управления ISPmanager Lite 5. Для изменения на тарифах мощного виртуального хостинга свяжитесь, пожалуйста, с отделом продаж.

3) Выбираем пункт «Версия PHP (PHP-FPM)». В нем необходимо выставить такую же версию php, какая сейчас стоит у Вас на сайте. После выставления, нажимаем «Ok«.

php fpm mod rewrite. Смотреть фото php fpm mod rewrite. Смотреть картинку php fpm mod rewrite. Картинка про php fpm mod rewrite. Фото php fpm mod rewriteВыставляем такую же версию, как у нас стояла на режиме apache

4) После этого возвращаемся во вкладку www-домены и меняем прежний режим работы на FastCGI (nginx + php-fpm) Сохраняем изменения.

Теперь мы можем попробовать зайти на сайт и проверить, все ли ссылки на сайте работают корректно, но, как правило, работает только главная страница, а все остальные отдают 404 ошибку.

Если у Вас похожая ситуация, то необходимо прописать дополнительный редирект.

5) Для этого в той же вкладке www-домены выбираем домен и нажимаем на кнопку «Конфиг».

php fpm mod rewrite. Смотреть фото php fpm mod rewrite. Смотреть картинку php fpm mod rewrite. Картинка про php fpm mod rewrite. Фото php fpm mod rewrite

Далее, в зависимости от Вашей CMS, выбираем один из вариантов:

a) Если у Вас WordPress, Joomla

Под ней необходимо добавить наш редирект:

В конечном итоге, у нас получится такой блок:

php fpm mod rewrite. Смотреть фото php fpm mod rewrite. Смотреть картинку php fpm mod rewrite. Картинка про php fpm mod rewrite. Фото php fpm mod rewrite

б) Если у Вас Битрикс

Редирект необходимо будет прописать после блока location @php < , и выглядеть он будет по другому:

Должно получиться вот так:

php fpm mod rewrite. Смотреть фото php fpm mod rewrite. Смотреть картинку php fpm mod rewrite. Картинка про php fpm mod rewrite. Фото php fpm mod rewrite

в) Если у Вас Opencart, то редирект необходимо вставить в блок location / :

ВАЖНО. Если у Вас на сайте используется SSL сертификат, то таких блоков у Вас будет два в разделе «конфиг». Необходимо прописать отдельно для http блока, и отдельно для https блока.

После того, как Вы прописали редирект, сохраняем конфиг и проверяем работу сайта.

Если по каким-то причинам Вам не удалось перейти на FastCGI (nginx + php-fpm), свяжитесь с нашей техподдержкой, и мы обязательно Вам поможем.

Источник

mod_rewrite — просто о сложном

Что это такое?

Hello world

Первая директива включает механизм mod_rewrite в текущей папке и во всех ее подпапках. Вторая указывает модулю mod_rewrite, что текущая папка в файловой системе соответствует корню сайта. Третья — непосредственно правило преобразования URL.

Прочесть его можно так:
Если сразу после начала строки («^») идет произвольное количество любых символов ( «(.*)» ), причем мы хотим запомнить, что именно это за символы, окружая их скобками, затем идет точка («\.») (экранируем точку, потому что одиночная точка — это просто любой символ), затем символы «msl» и на этом строка заканчивается («$»), то заменим исходный URL на следующий: возьмем первую запомненную подстроку в скобках из правила, прибавим к ней «.php», добавим все дополнительные параметры адреса, которые могли быть «[QSA]» и на этом закончим, не будем применять дальнейшие преобразования, если они есть «[L]»

Все, теперь Вы можете смело менять все ссылки, заканчивающиеся на «.php» на «.msl» и писать в своем блоге, что изобрели новый скриптовый язык. Apache, встретив ссылку на «index.msl» с помощью mod_rewrite на лету преобразует ее в «index.php» и вызовет нужный скрипт.

А что еще умеет mod_rewrite?

О, этот модуль умеет многое. Лично я жду, когда же кто-нибудь достаточно продвинутый в магии и PCRE напишет «Морской бой» на mod_rewrite.

Но пока этого не случилось, покажу еще несколько вариантов использования этого замечательного модуля.

Предположим, что Вы решили написать движок для блогов. Каждый пользователь будет иметь возможность создать свой блог, выбрать для него имя, писать в свой блог и читать чужие записи.

Первичная фильтрация данных

В квадратных скобках, в соответствии с синтаксисом PCRE, мы задаем класс символов, включая в него цифры, буквы латинского алфавита, минус и знак подчеркивания. Все адреса, в которых будут какие-то другие символы, не пройдут проверку этим правилом и приведут к ошибке 404. Флаг [L] необходим, чтобы движок mod_rewrite, успешно сделав преобразование, не пошел далее, на второе правило. Этот флаг аналогичен оператору break внутри цикла.

Второе правило не задает напрямую преобразование адреса (символ «-«), а запрещает прямой доступ к скрипту viewblog.php (флаг «[F]»), тем самым закрывая злодеям возможность передать в параметрах что-то вредоносное.

Использование для кэширования в ФС

Предположим, что Ваш проект растет. Хостинг перестает справляться с нагрузками — сотни блоггеров, десятки тысяч просмотров их блогов, да еще и комментарии…

И тут mod_rewrite может придти на помощь, если по каким-то причинам Вы не хотите переходить на свой сервер.

Во-первых, модифицируйте свой скрипт viewblog.php таким образом, чтобы при обращении к нему он не только выдавал сформированную страницу в браузер, но и записывал ее в файловую систему по адресу /blogs/ABC.html

Проще всего это сделать, использовав функции управления буферизацией. Предположим, что исходный код скрипта viewblog.php выглядит у Вас примерно так:

Применим буферизацию вывода и запишем вывод в файл.

RewriteRule blogs\/([a-z0-9_-]+)([\/]<0,1>)$ blogs\/$1\.html

RewriteCond % blogs\/([a-z0-9_-]+)\.html$
RewriteCond % !-s
RewriteRule (.*) viewblog.php?blogname=%1

В первой строке мы преобразуем URL вида blogs/ABC/ в blogs/ABC.html, таким образом перенаправляя Apache на сгенерированный нами файл кэша страницы.
Следующие три строки представляют собой одно большое правило. Если идет запрос на blogs/ABC.html и при этом в файловой системе нет такого файла — запрос перенаправляется на скрипт viewblog.php

Таким образом нам остается только предусмотреть систему своевременной очистки кэша и задача решена.

Другие применения

Лично я использую модуль mod_rewrite аналогично последнему примеру для генерации и хранения в ФС превью изображений.

Очень легко с помощью mod_rewrite делается отображение поддоменов на папки, например forum.localhost.localdomain физически будет находиться в localhost.localdomain/forum, что часто бывает проще для разработчика приложения.

Незаменим mod_rewrite для ограничения скачивания файлов на файловом хостинге или в магазине цифровых товаров (придется задействовать механизм символических ссылок) или для запрета хотлинкинга (через проверку реферера).

А вообще — это Вуду 🙂
Чертовски интересное Вуду, позволяющее каждый день открывать новые стороны и применения.

Источник

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Полное руководство по mod_rewrite (часть 1): Как включить и как работает mod_rewrite

Оглавление. Полное руководство по mod_rewrite

8. Директива RewriteOptions, технические подробности, когда НЕ использовать mod_rewrite

Что такое mod_rewrite

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

Эта инструкция призвана это исправить: если вы совершенно не понимаете даже азов работы mod_rewrite, то это руководство поможет вам разобраться; если вы уже в общих чертах понимаете, как происходит поиск совпадений и формирование нового адреса, то эта инструкция поможет вам систематизировать ваши знания и узнать новые сложные или необычные примеры использования mod_rewrite.

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

mod_rewrite предоставляет гибкий и мощный способ манипулирования URL-адресами, используя неограниченное количество правил. Каждое правило может иметь неограниченное количество прикреплённых условий правила, позволяя вам переписать URL на основе переменных сервера, переменных среды, заголовков HTTP, метки времени, запросы к внешним базам данных и различных других внутренних программ и обработчиков.

Правила перезаписи могут оперировать полными URL, включая path-info (информацию о пути) и строку запроса; отдельные правила можно настроить для использоваться в контексте всего сервера, отдельного для каждого виртуального хоста или для каждой директории (папки). Правила перезаписи могут вести к последующим правилам, внутренним подпроцессам, внешним перенаправлениям запросов или проксированию, в зависимости от флагов, которые вы добавили к правилам.

Поскольку mod_rewrite такой мощный, его изучение требует времени. Функциональность mod_rewrite пересекается с некоторыми другими модулями Apache и решение, что именно использовать, за вами. В этой инструкции дан подробный разбор всех возможностей mod_rewrite и показано много примеров, как использовать этот модуль, а когда лучше использовать другие альтернативы.

Для чего нужен mod_rewrite / Что умеет mod_rewrite

Слово «rewrite» в названии модуля буквально означает «перезапись». Эта «перезапись» относится к URL (адресу сайта, страницы, файла). Перезапись (преобразование) происходит между тем, что введено в строке браузера пользователя (фактически, отправлено на веб-сервер) и тем, что веб-сервер получит на самом деле.

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

Слеши (/) на веб-сервере разделяют вложенные подпапки. Но в случае с ЧПУ если в адресе страницы встречается строка /product/phone/Samsung/, то это не означает, что на веб-сайте действительно имеется папка product, в которой подпапка phone и в которой подпапка Samsung. Благодаря mod_rewrite строка вида /product/phone/Samsung/ перезаписывается в строку вида index.php?category=product&type=phone&brand=Samsung. Таким образом, пользователь набирает в веб-браузере, либо переходит по ссылке с удобным для его восприятия адресом, а веб-сервер получает данные в понятном для обработки виде, когда каждой переменной присваивается соответствующее значение и эти переменные передаются в скрипт веб-сервера для обработки, либо отображения информации.

Это очень популярное, но не единственное применение mod_rewrite. Этот модуль умеет делать перезапись на основе разных данных: к примеру, на основе типа браузера. Это позволяет показывать разные страницы в зависимости от типа браузера, IP адреса, языка пользователя, установленных кукиз и т.д.

mod_rewrite умеет делать редирект (перенаправление) на другой адрес. В результате, если ваш сайт переехал на другой домен или поменялась структура сайта, вы можете настроить автоматическую переадресацию со старых адресов страниц на новые.

mod_rewrite умеет запрещать доступ к определённым ресурсам, как по определённому условию, так и безусловно. Т.е. вы можете настроить контроль доступа, закрыв определённые страницы для всех пользователей, либо на основе их стран, языка, веб-браузера и т.д.

На самом деле – это не всё, что умеет mod_rewrite! И даже в этом мануале вы встретитесь с дополнительными примерами применения mod_rewrite.

Прежде чем мы перейдём к теории и практики использования mod_rewrite, нужно включить модуль mod_rewrite для веб-сервера, либо убедиться, что mod_rewrite уже включен. Если вы используетесь shared (совместным) хостингом, то у большинства хостеров этот модуль включен по умолчанию. Ниже показано, как включить этот модуль на своём собственном локальном (домашнем) сервере, либо веб-сервере на VPS.

Включение mod_rewrite

mod_rewrite – это опциональный (необязательный) модуль веб-сервера Apache, который по умолчанию отключён. Поэтому работу с mod_rewrite нужно начать с его включения в веб-сервере.

Начнём с небольшой теории. Правила mod_rewrite для преобразования URL можно описывать как в конфигурационном файле Apache apache2.conf (в некоторых системах называется httpd.conf), так и в файле .htaccess отдельно для каждой директории.

Если вы используете Debian, Ubuntu, Linux Mint, Kali Linux то mod_rewrite можно включить следующей командой:

В Debian, Ubuntu, Linux Mint, Kali Linux эта группа строк выглядит так:

В этой группе строк замените

После чего перезапустите веб-сервер (на некоторых дистрибутивах служба называется не apache2, а httpd):

Если вы используете Apache в Windows, то для включения mod_rewrite в файле httpd.conf (C:\Server\bin\Apache24\conf\httpd.conf) найдите и раскомментируйте строку:

php fpm mod rewrite. Смотреть фото php fpm mod rewrite. Смотреть картинку php fpm mod rewrite. Картинка про php fpm mod rewrite. Фото php fpm mod rewrite

В Windows она может выглядеть так:

В этой группе строк замените

php fpm mod rewrite. Смотреть фото php fpm mod rewrite. Смотреть картинку php fpm mod rewrite. Картинка про php fpm mod rewrite. Фото php fpm mod rewrite

Чтобы любые изменения, сделанные в конфигурационном файле Apache, вступили в силу, нужно перезапустить сервер.

Если вы решили для использования mod_rewrite вносить изменения в конфигурационный файл Apache, то не забывайте каждый раз после изменения правил перезапускать веб-сервер, чтобы эти изменения вступили в силу.

Также должна быть включена опция Options FollowSymLinks (по умолчанию она включена). Если FollowSymLinks отключено, то невозможно использовать движок перезаписи. Это ограничение продиктовано причинами безопасности.

Журнал (логи) преобразований mod_rewrite

Когда вы написали и тщательно проверили правила для mod_rewrite, журнал преобразований можно включить или отключить на своё усмотрение. Но на время обучения либо тестирования новых правил, рекомендуется, конечно, включить ведение журнала и в случае возникновения проблем изучать логи mod_rewrite.

Тема логов Apache сама по себе довольно объёмная, не будем на ней заострять внимание. Но необходимо упомянуть, что если вы работали с предыдущими версиями mod_rewrite и использовали директивы RewriteLog и RewriteLogLevel, то теперь их функциональность полностью заменена директивой LogLevel, которая настраивать логи всего веб-сервера и всех модулей.

По умолчанию LogLevel установлено показывать предупреждение, в конфигурационном файле Apache это строка:

Можно заменить эту строку на:

Она означает, что для всего веб-сервера и остальных модулей настроен уровень журнала «error», т.е. показывать только ошибки и более важные сообщения, а для модуля mod_rewrite установлен уровень трассировки trace2.

mod_rewrite предлагает детальную запись его действий с уровней ведения журнала от trace1 до trace8. Уровень trace8 означает запись практически всех действий. Использование высоких уровней логов трассировки для mod_rewrite драматически замедлит ваш Apache HTTP сервер! Используйте уровень выше чем trace2 только для отладки!

Сообщения о работе mod_rewrite будут записываться в файл ошибок Apache (например, error.log). Чтобы из этого файла отфильтровать только строки, относящиеся к mod_rewrite, можно использовать поиск по «[rewrite:». К примеру, в Linux это можно делать примерно следующей командой:

Директивы RewriteEngine и RewriteRule

Модуль mod_rewrite использует несколько директив, и в этом руководстве мы рассмотрим их все. Но в каждом примере мы неизменно будем использовать две главные директивы, это RewriteEngine и RewriteRule. Первая директива, в виде

просто включает использование mod_rewrite в файле .htaccess.

Значение директивы можно установить на off:

В этом случае правила, которые следуют после отключения RewriteEngine off, не будут задействованы. Отключение RewriteEngine можно использовать вместо удаления или комментирования строк с правилами RewriteRule.

Конфигурации перезаписи не наследуются виртуальными хостами. Это означает, что нужно иметь директиву RewriteEngine on для каждого виртуального хоста, на которым вы хотите использовать правила перезаписи.

А вторая директива RewriteRule является главной рабочей лошадкой этого модуля. Именно с её помощью мы будем устанавливать правила перезаписи.

Она используется следующим образом:

Шаблон – это то, что мы ищем в передаваемом URL.

Подстановка – это новая строка, которая передаётся веб-серверу в том случае, если в исходных данных найдено совпадение с Шаблоном.

[флаги] – это условные обозначения, задающие дополнительные действия или поведение при перезаписи. Они являются необязательными. Мы также рассмотрим флаги в этой инструкции.

Шаблон RewriteRule

В качестве Шаблона используется регулярное выражение, которое представляет собой способ описать текст, который считается подходящим (совпадающим с шаблоном). Шаблоны можно выразить словами, например, «все слова, которые начинаются с буквы A» или «каждый десятизначный телефонный номер» или «каждое предложение с двумя запятыми и без заглавных букв Q».

Польза регулярных выражений в том, что они позволяют, не перечисляя все возможные варианты (которых может быть бесконечно много), установить правила для каждого из этого возможного варианта, если исходный запрос удовлетворяет определённым требованиям.

Более подробно регулярным выражениемя (шаблонам) посвящена вся вторая часть данного руководства.

Какая часть запроса проверяется на совпадение с Шаблоном?

Как уже было сказано, правила преобразования могут быть установлены для всего веб-сервера (контекст всего сервера) в файле httpd.conf; для отдельного виртуального хоста (контекст виртуального хоста) в блоках ; и для отдельных директорий (папок) (контекст директорий) в файлах .htaccess и блоках ).

В контексте VirtualHost Шаблон первоначально проверяется на соответствие с частью URL после имени хоста (hostname) и номера порта и до строки запроса (т.е. к примеру «/app1/index.html»). Это (%-кодированный) URL-путь.

Путь до директории, где определено правило, отбрасывается из анализируемого запроса (вплоть до и включая конечный слэш). В конечном счёте, правилу для сравнения передаётся строка «ниже» папки, где определено правилов.

Подстановка RewriteRule

Подстановка правила перезаписи – это строка, которая заменяет оригинальный URL-путь, который совпал с Шаблоном. В качестве подстановки может быть:

Указывает местоположение в файловой системе ресурса, который будет доставлен клиенту. Подстановки обрабатываются как путь к файловой системе, когда правило настроено в контексте сервера (virtualhost), и первый компонент пути в подстановке существует в файловой системе.

Если указан абсолютный URL, mod_rewrite проверяет, совпадает ли имя хоста с текущим хостом. Если да, то схема и имя хоста отбрасываются и результирующий путь трактуется как URL-путь. В противном случае, выполняется внешний редирект (перенаправление) для заданного URL. Для принудительного внешнего редиректа на текущий хост (чтобы запрашиваемая страница поменяла адрес на другую страницу этого же хоста), смотрите флаг [R], описанный далее.

Чёрточка говорит о том, что не должна выполняться какая-либо подстановка (существующий путь должен быть пропущен нетронутым). Это используется когда нужно применить флаг (смотрите далее) без изменения пути.

В дополнении к простому тексту, строка Подстановки может включать:

Директива RewriteBase

Мы уже выяснили, что на совпадение проверяется только часть запроса – начиная от текущий папки и далее вложенные подпапки. Если Подстановкой, получившейся в результате перезаписи, является относительный путь, то чтобы найти этот ресурс, к полученному значению добавляется путь до текущей папки. Это является поведением по умолчанию, а директива RewriteBase позволяет изменить это поведение.

Директива RewriteBase определяет URL префикс, используемый для постановки перед относительным путём.

Обычно, эта директива не требуется. Но она нужна когда:

Логика работы mod_rewrite

Как вы уже начали понимать, модуль работает следующим образом: приходящий запрос сравнивается с каждым установленным веб-мастером правилом, если есть совпадение, то запрос меняется в соответствии со второй частью правила.

Это так, но это не всё. Если указано несколько правил RewriteRule и, допустим, в запросе найдено совпадение с первым правилом и исходная строка запроса изменена в соответствии с этим правилом. Второму правилу передаётся не исходная строка запроса, а новая строка, получившаяся в результате обработки всеми предыдущими правилами. И также происходит ниже по цепочке.

Проверку по всем правилам можно назвать проходом (раундом, циклом). Если в данном раунде случилось хотя бы одно совпадение (сработало правило), то после завершения прохода начинается ещё один круг проверки по этим же самым правилам! Это неочевидно и мало где об этом говориться – поэтому обратите на это особое внимание. Т.е. на новый раунд передаётся уже изменённая строка запроса и именно она проходит оценку по всем правилам. И вновь: если сработало хотя бы одно правило, идёт заход на новый круг и т.д.

Это является поведением по умолчанию для mod_rewrite. Это поведение можно изменить несколькими флагами, о которых будет рассказано далее.

Тестирование правил mod_rewrite

Для тестов, на вашем веб-сервере в папке сайтов создайте новую папку mr, к примеру, на Windows это может быть каталог C:\Server\data\htdocs\mr\, а на Linux это /var/www/html/mr/

Поскольку я работаю с локальным, сервером, то у меня теперь эта папка доступна по адресу http://localhost/mr

В этой папке создайте файл index.html следующего содержания:

И создайте пустой файл .htaccess

Источник

Настройка mod_rewrite

Что такое mod_rewrite?

Вспомните последнее посещение интернет-магазина. Найдя нужный товар, вы, вероятно, увидели примерно такой URL:

Это происходит не потому, что разработчики этого сайта потратили уйму времени, чтобы настроить отдельные директории для разных категорий товара, а благодаря удобному модулю по имени mod_rewrite. Данный модуль позволяет создавать пользовательские и упрощенные URL-адреса. На самом деле URL выглядит примерно так:

Требования

Для выполнения данного руководства понадобятся привилегии root (чтобы получить более подробную информацию, читайте статью «Начальная настройка сервера Ubuntu»).

Кроме того, нужно предварительно установить apache. Для быстрой установки этого веб-сервера в Ubuntu используйте команду:

sudo apt-get install apache2

1: Включение mod_rewrite

Для начала нужно включить mod_rewrite, это очень просто:

sudo a2enmod rewrite

Данная команда включит модуль или же выведет сообщение «Module rewrite already enabled» в случае если модуль уже включен.

sudo nano /var/www/example.com/.htaccess

Примечание: для этого понадобятся расширенные привилегии sudo.

sudo nano /etc/apache2/sites-available/default

В этом файле найдите следующий раздел и измените значение строки AllowOverride (замените None на All). В результате раздел будет иметь такой вид:

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all

sudo service apache2 restart

Теперь все готово для переписывания URL-адресов сайта.

3: Переписывание URL-адресов

RewriteRule Pattern Substitution [OptionalFlags]

Опции, использованные в данной команде:

Примеры перезаписи URL-адреса

Пример 1: открываете страницу А – попадаете на страницу Б

Это наиболее простой пример перезаписи URL: посетитель сайта вводит в браузер один URL, но перенаправляется на другой. Чтобы настроить такое поведение, следуйте инструкциям этого раздела.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *