------------------------------ -----------Регулярные выражения---------------------
Групирование
(abcd)
у него есть прикольная фишка -- запоминать и использовать уже найденные совпадения групировки, их можно использовать в построение динамических регекспов.
Они сохраняются под номерами:
\1
\2
\3
\4
\5
\6
\7
\8
\9
В некоторых реализациях регекспов и дальше.
Эту способность можно использовать так:
(та|ту)-\1
Найдется: та-та, ту-ту
Но не найдется: ту-та, та-ту
Эта фишка называется "обратное ссылание"
Отключение "обратного ссылания"
(?:template)
Если не будет использоваться обратное ссылание в выражении, то его лучше отключить -- так будет искаться быстрее.
Без обратного ссылания работает и атомрный поиск
(?>template) -- возвращает толькое последнее совпадение.
Как это все работатет:
abccaxcc
Регексп: Результат: Запоминает:
a(bc|b|x)cc --> abcc \1 => b
--> axcc \2 => x
a(?:bc|b|x)cc --> abcc
--> axcc
a(?>bc|b|x)cc --> axcc
Ловушка атомарного поиска:
axxxa
a(?>x*)xa --> нифига, потому чтозвездочка сьест все иксы, возврата в группу нет, чтобы перед а был х:)
Включение/отключение нечувствительности к регистру(МОДИФИКАТОРЫ):
По умолчанию отключено
(?i) -- включить
(?-i) -- отключить
Example:
(?i)^something$
Можно использовать модификаторы внутри групы:
(?i:tty) = (tty|TTY)
Коментарии:
Когда сложные регекспы, удобно вставлять в них комментарии
(?#comment)
A(?#comment)B --> AB
Просмотр вперед и назад
Результаты не содержат групировки (только то что подсвеченное в след примере)
(?=example) вперед
(?!example) вперед с отрицанием
(?<=example) назад
(? назад с отрицанием
Людовик(?=XVI) ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL
Людовик(?!XVI) ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL
(?<=Сергей )Иванов Сергей Иванов, Игорь Иванов
(? Сергей Иванов, Игорь Иванов
Поиск по условию:(?(?=если)то|иначе)
------------------------------ --------------mod_aliasing---- ------------------------------ ------------------
Alias /path/ /home/user/Documents/ sitescontent/
В алиасе путь пишется всегда не относительно документ_рут. Поэтому можно перенаправлять вне рута, но там у вебсервера должны быть соответсвуюшие права файловой системы. И сразу после алиаса нужно прописать:
Alias /path/ /home/user/Documents/ sitescontent/
Order allow, deny
Allow from all
------------------------------ -------------mod_userdir------ ------------------------------ ------
Применяется для того, чтобы пользователи одного компьютера могли размещать свои публичные документы в веб.
Можно это делать так
UserDir disabled
UserDir enabled user1 user2 user3
Или наоборот
UserDir enabled
UserDir disabled user1 user2 user3
Можно ставить папку в которую юзеры смогут ложить свои файлы для доступа из глобальной сети.
UserDir public_html -- это по умолчанию (папка оказывается в хомовой директории)
UserDir /usr/web
UserDir /home/*/www
UserDir /var/*/www
Чтобы все было доступным, нужно проследить чтобы у веб-демона был файловый доступ к этим местам на чтение и выполнение по всем уровням иерархии на пути в файлу.
------------------------------ ------mod_prefork, mod_worker, mod_threadpool---------------- ------------------------
Директива User
Обычно апач запускается под рутом, тогда эта директива сработает и он сменить права с рута на права указанного юзера. Если апач будет запушен не под рутом, то это не сработает и он будет работать под тем юзером, под которым он был запущен.
User unix-userid
------------------------------ --------------------------mod_ rewrite----------------------- ------------------------------ --------------
Движок для перезаписи урлов в реальные пути к ресурсам.
Имеется две главные директивы
RewriteRule
RewriteCond
Вторая -- это слуга первой:)
Исторически первыми пишутся кондишины, они игнорируются пока не прочитается строка с рулом. Если строка урла удовлетворяет патерн рула, то тогда идет возврат к кондишинам, которые доуточняют точно ли урл подходит нашему правилу.
То есть между нашими кондишинами существует связь логического И.
Чтобы между ними была связь ИЛИ, нужно использоваться флаг [OR].
Вообще у кондишина таких флагов два:
[OR]
[NC] -- без учета регистра (no case)
У рулов таких флагов много, о них чуть позже.
То есть понятно, идет сканирование конфиг файла, кондишины игнорируются, читаются рулы, если рул подходит, то идет возврат к первому кондишину перед рулом, и уже идет проход через все кондишины до рула.
Если все совпало, происходит рерайт урла. И идет сканирование дальше до следующего рула, рул же уже имеет дело с презаписаным урлом предыдущим совпавшим. Если его патерне подошел, идет возврат к первому кондишину после предыдущего рула, и пошли вниз -- все кондишины тоже удовлетворены, и этот рул вносит свою лепту в перезапсить.
Чтобы не дать портить урл следующим рулам, нужно после нашего рула поставить флаг [L](last)
Мы можем использовать обратные ссылания в наших рулах и кондишинах:
$N -- это ссылка на патерн с рула
%N -- а это ссылка на патерн с кондишина.
Их можна ставить в патрены кондишина, и в заменяющую строку рула.
Структора рула
RewriteRule Pattern RewriteResult [flags]
основыне флаги:
L -- ласт, следующие рулы свободны
P -- пропустить через модуль прокси (нужно не забыть поставить хттп:// и хостдомен перед улом)
E:VAR=VALUE -- утановить переменную среды
С -- чейн(цепочка), это указывает, что если данный урл не подходит правилу, то следущий считается с ним связанным -- работает с результатами первого--и он тоже пропускается.
F -- форбидден -- возвращает сразуже хттп 403 игнорирую дальнейшие правила
G -- ган, возвращает хттп 410, типа ресурса больше нет.
N -- некст, типа вернуться опять к первому рулу и пройтись по новой фазе цикла, но уже с изменненным предыдущей фазой урлом.
CO:=NAME:VAL:domain[:lifetime[ :path]] -- поставить куку.
NC -- регистр пофиг.
NE -- no URI escaping of output. Не менять спецсимволы в результате рерайта -- это полезно чтобы наша ссылка на якорь не преваратилась в ссылкой с %код вместо "#" якоря.
NS -- не для сабреквеста. Если урл подошел под перезапись парвилом, но это внутренний(вызванный сервером к самому себе) реквест, то не применять это правило.
PT -- пасс сру, после отработки ререйт модуля, внутри апача меянтся состояние, которое указывает, что это уже не урл, а локальный файлпаз. Но если у нас после парвил стоит Аlias и результат рерайта совпадает с его условием, то произойдет креш, из-за состояния, что уже файл паз. Чтобы этого не произошло, ставим флаг, модуль алиас спокойно читает результат рерайта как урл и обращается по нужному файлпазу.
QSA -- query string append, урл для рула всегда приходит без параметров после знака "?". Единственный способ проверить эти параметры это кондишин и обращение в нем %{QUERY_STRING}. А чтобы нам в результате урла добавить параментры, нужно просто дописать в конец знак вопроса и нужные параметры. Если без этого флага, то старые будут перетерты, с этим -- добавлены к старым.
R[=code] -- сделать редирект. в коде темп поумолчанию, можно permanent, seeother, или номером. Опять же нужно не забыть о протоколе и и хосте с доменом в урле.
S=num -- пропустить num-количество последующих правил после совпадения с поточным.
T=MIME-type -- заставить сервер считать ресурс с установленным майм-тайпом.
Структура кондишина
RewriteCond TestString CondPattern [flags]
В тестстринге могут быть:
обратные ссылки на патерн рула
обратные ссылки с патернов пред кондишинов
Обращение к рерайтмапам
Переменные сервера
В кондпатернах могут быть кроме сравнений, отрицаний, регекспов и директивы:
-d -- проверить является ли кондишин сринг существующей директорией
-f -- существующим файлом
-s -- файлом с размером больше 0
-l -- симлинка
-F -- существующим файлом, при этом происходит сабреквест -- проходит тест всех уровней настроек сервера и системы доступа к файлу
-U -- проверяется урл через сабреквест -- тест всех уровней настроек сервера.
Комментариев нет:
Отправить комментарий