rewriterule htaccess что это
Htaccess. правило RewriteRule: просто, понятно, с примерами и объяснениями
Htaccess. правило RewriteRule: просто, понятно, с примерами и объяснениями
Мы, как веб программисты, часто сталкиваемся с файлом .htaccess и в частности с его модулем MOD_REWRITE и синтаксисом RewriteRule. И по началу трудно разобраться и понять принцип его работы, правила по которым он работает и механизм преобразования динамических ссылок в статические и наоборот. В этой статье я постараюсь максимально просто, максимально доступно, с объяснениями и примерами растолковать так, что бы у Вас не осталось каких либо вопросов.
За преобразование динамических ссылок в статические отвечает модуль mod_rewrite с синтаксисом RewriteRule, принцип работы и правило преобразования, которого я и буду объяснять.
Для примера возьмем динамическую ссылку, которую нам надо преобразовать:
site.ru/catalog/index.php?auto=BMW&model=X5&state=NEW&page=5
В этой ссылке мы включили максимально возможное количество передаваемых параметров на нашем сайте.
То есть, в каталоге выбрали авто BMW, модель X5, состояние – новое, страница 5.
В файле .htaccess, который мы разместим в корневой папке каталога catalog/ записываем (файл .htaccess действует только на каталог где он расположен и на его дочерние каталоги):
RewriteEngine on (включаем процесс преобразования ссылок)
RewriteRule ^([A-Za-z0-9-]+)/([^/]+)/(.*)/(8+).html$ index.php?auto=$1&model=$2&state=$3&page=$4 [L]
Следует отметить, что данный мод преобразовывает ссылки не с динамической в статические ссылки а НАОБОРОТ! То есть, на сайте мы пишем статические ссылки, а мод рерайт преобразовывает статическую ссылку с сайта на динамическую. То есть представленную выше ссылку мы должны записать на сайте в виде статической:
site.ru/catalog/ BMW/X5/NEW/5.html
А модуль RewriteRule эту ссылку преобразовывает в динамическую по правилу записанному в .htaccess и выдает сайту:
Пример RewriteRule с пояснениями:
Допустим, у нас на сайте есть статьи, которые имеют динамические страницы:
http://www.site.ru/articles?id=( id статьи)
Сделаем, чтобы ссылка на наши статьи была более красива, например:
http://www.site.ru/nazvanie-stati/ или
http://www.site.ru/nazvanie-stati.html
Для этого, в нашей MySQL таблице, добавляем дополнительную строку, в которой будем хранить уникальное название статьи латинскими буквами без пробелов, слешов и специальных символов, недопустимых в ссылках. Например: Moya-pervaya-statya ну и по такому принципу. Назавем строку в нашей таблице, например eng_name_stati
Динамическая ссылка теперь будет иметь вид:
http://www.site.ru/articles?eng_name_stati=(Moya-pervaya-statya и т.д.)
Главный момент, который нужно понять, файл .htaccess, как я говорил выше, не преобразует динамические ссылки в статические, а наоборот, статические преобразовывает в динамические.
Правило преобразования RewriteRule будет иметь вид:
RewriteRule ^(.*)/$ articles?eng_name_stati=$1 [L] для вида статической ссылки: http://www.site.ru/nazvanie-stati/ или
RewriteRule ^(.*).html$ articles?eng_name_stati=$1 [L] для вида http://www.site.ru/nazvanie-stati.html
Теперь, когда мы введем ссылку http://www.site.ru/nazvanie-stati.html в браузере, мы попадем на нашу статью http://www.site.ru/articles?eng_name_stati=nazvanie-stati и эти обе ссылки будут рабочими. На нашем сайте мы просто ставим ссылки в статическом виде для поисковых систем. И когда люди заходят по статической ссылке, наш файл .htaccess преобразовывает ее в динамическую, понятную для нашего сайта и видную только ему.
Дополнение:
Бывает так, нужно сначала проверить, не является ли это ссылка на существующий файл на нашем сервере, например /catalog/webmaster/index.html может оказаться существующим файлом, но если эта ссылка попадет под соответствующее правило RewriteRule она согласно этому правилу преобразуется. Поэтому, если нам сначала нужно проверить, не является ли этот файл или директория прямая, нужно пред правилом RewriteRule написать условие если:
Если нет такой папки
Если нет такого файла
Выполнить преобразование
Выглядеть это будет так:
Где, RewriteCond – условие если, % – полный системный путь к запрашиваемому файлу или директории, Восклицательный знак ! означает отрицание не, -d – дериктория, -f – файл.
Теперь, прежде чем применить правило RewriteRule, будет проверено условие RewriteCond
P.S.: Так же по теме, может Вам будет интересно: Как сделать русскую URL как в Википедии
Почему Вы еще не прокомментировали?
Оставьте свой комментарий! Весь Интернет уже заждался!
Сударь Дядька говорит:
Здрастье
Есть такая задачка
Есть несколько субоменов вида host1.domen.ru, host2.domen.ru, host3.domen.ru проассоцииованные с соответствующими виртуалхостами в апаче
Есть главная страничка, открывающаяся по www.domen.ru
Нужно, что бы при открытии www.domen.ru/host1 перебрасывало на host1.domen.ru, ну и так далее по списку..
Причем сама адресная строчка http://www.domen.ru/host1 при этом меняться не должна.
Как это сделать? Подскажите, пожалуйста, граждане судари!
Здравстыуйте.
Помогите сделать правильное преобразование статических ссылок в динамические.
Например есть страница mysite.ru/tovars.php
на ней перечень товаров. При нажатии на любой из них появляется ссылка вида:
mysite.ru/tovars.php?t=name-tovara
Нужно чтобы эта страница открывалась по запросу:
mysite.ru/tovars/name-tovara.php
Первую часть вопроса решил вот таким правилом
RewriteRule ^(.*)/component/tag/(.*)$ http://www.site.com.ua/$1/tags/$2 [R=301,L]
Но как теперь сделать что
если переходишь по ссылке которой нет по адресу
http://www.site.com.ua/tags/имя2
http://www.site.com.ua/tags/имя3
http://www.site.com.ua/tags/имя4
и т.д.
шло бы перенаправление на
http://www.site.com.ua/tags/
Подскажите как сделать следующее правило
необходимо чтоб при обращении по адресу
www.site.com.ua/ru/component/tag/имя
переходил на www.site.com.ua/ru/component/tag/имя www.cultura.kh.ua/tags/ru/имя
вместо /ru/ есть еще /en/ /uk/
и чтоб при вводе адресов которых нет имя2 и т.д.
http://www.site.com.ua/tags/имя2
переходили все запросы на
http://www.site.com.ua/tags/
Ответ: Ели у Вас уже есть (действующий) сайт с ссылками: САЙТ/component/content/article/9-news/24-shedule-price а Вы хотите что бы была ссылка: САЙТ/9-news/24-shedule-price то очевидно Вам нужно заменить на всем сайте ссылки САЙТ/component/content/article/9-news/24-shedule-price на САЙТ/9-news/24-shedule-price и редиректом перенаправлять со старых ссылок на соответствующие новые. То есть:
RewriteRule ^component/content/article/9-news/(.*)$ 9-news/$1 [R=301,L]
Если знаете, подскажите пожалуйста.
Есть статик файл лежащий на фтп в виде
/flfg/ShowArticle.asp-ArticleID=84.php
Как сделать чтобы этот файл открывался по ссылке
site.ru/flfg/ShowArticle.asp?ArticleID=84
Если бы статик файл лежал не в папке /flfg/, то прекрасно все работало бы в таком виде:
RewriteCond %
RewriteRule ^ShowArticle.asp$ ShowArticle.asp-ArticleID=%1.php [L,QSA]
Надо сделать 301 редирект
Исходный URL site.com/?id=1
Конечный URL site.com/index.php?id=1
По сути, нужно найти /? и заменить на /index.php?
Никак не могу реализовать, только на вас надежда)
Сейчас все работает, но не сделал ли я ничего лишнего, не перегнул ли палку. Или его как то можно упростить? Пожалуйста, критикуйте, если что-то не правильно. Заранее благодарен.
Ответ: Если Вы редиректите на этот же домен, %
RewriteRule ^catalog/mashine_([A-Za-z0-9_]+)/$ /catalog/machine_$1/ [R=301,L]
RewriteRule ^([A-Za-z0-9-_] )/([A-Za-z0-9-_] )/([A-Za-z0-9-_] )$ svp.php?pn=$1
Князь Васин говорит:
Ответ: Желательно написать реальный пример, откуда куда редиректить
Не совсем)Там я большое сообщение написал, но отобразилась только часть его. В любом случае проблема уже решена, еще раз спасибо за статью.
Класс, реально спасибо.
Оччень помогло в тяжелых буднях
Спасибо огромное за статью!
Но я, все же, не могу справиться со своей задачей.
Заменить группу правил:
RewriteCond %
RewriteRule ^split_systems_daikin.php /split_systems_daikin.php? [R=301,L]
RewriteCond %
RewriteRule ^cassette_conditioners_daikin.php /cassette_conditioners_daikin.php? [R=301,L]
RewriteCond %
RewriteRule ^channel_conditioners_daikin.php /channel_conditioners_daikin.php? [R=301,L]
на одно с использованием регулярных выражений:
RewriteCond %
RewriteRule ^(.*).php?(.*)$ /$1.php? [R=301,L]
Подскажите, пожалуйста, в чем ошибка.
Ответ: А так?
RewriteRule ^(.*)\.php /$1.php? [R=301,L]
Принц Игорь говорит:
RewriteEngine on
RewriteCond %
RewriteCond %
RewriteRule ^([A-Za-z0-9] )/([A-Za-z0-9] ).html$ index.php?category=$1
Ответ: RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)\.html$ index.php?category=$1 [L]
Так?
Вроде нашел решение
RewriteCond %
RewriteRule ^wp/$ http://raikovstudio.ru/%1 [L,R=301]
У меня раньше сайт был в директории wp, потом был перемещен в корень. (глупость сделал конечно)
вот сейчас надо получается сделать так чтобы люди со старых ссылок http://mysite.ru/wp/?p=1 попадал на http://mysite.ru/?p=1
Не подскажете как сделать?
Ответ: Можно простым редиректом: RewriteRule ^wp/(.*)$ /$1 [R=301,L]
Спасибо за статью! Подскажите, как сделать чтоб ссылка НЕ заканчивалась расширением (.html) или слэшем?
То есть не так: nazvanie-stati.html
А так: nazvanie-stati
Ответ: Совершенно верно. Спасибо за то, что указали на этот недочет.
Разумно будет закомментировать точку, что бы она была не «любым символом», а именно точкой: \.html
поддомен находится здесь:
/public_html/shop
что изменить в коде что бы можно было разместить папку так
/shop
Княгиня chooch говорит:
спасибо, самая подробно и понятно написанная статья по теме
Блин не входят большие комментарии
с использованием чпу не отображаются стили сбивается путь к файлу добавляются как бы папки которые вы пишите в ссылке. Решил проблему так
Администратор: Александр, для того, что бы не сбивались пути к файлам, всегда указывайте путь от корня сайта (начинайте ссылку со слеш): href=»/css/index.css»
Король Леонид говорит:
Огромное спасибо, три раза уже пытался разобратся с ЧПУ. Все форумы переситал но ничего не смог понять, птому как вся проблема в том что данный мод преобразовывает ссылки не с динамической в статические ссылки а НАОБОРОТ! А об этом никто ничего не пишет. Спасибо за разъяснение!
Огромнейшее спасибо за статью, всё то что нужно и понятно!
Князь великий сия земель Ветроподувайко говорит:
и 1 за величать в коментах) очень симпотно
Князь Ветроподувайко говорит:
Дякую! Змістовно і зрозуміло пояснено.
Сударь Александр говорит:
Спасибо за статью) все максимально просто и подробно расписано)
Синтаксис htaccess, полное руководство
Метасимволы
Используются для задания групп символов или «меток» в шаблоне. Например, метки начала или конца строки.
Дополнение. Все, что расположено после символа ‘#’, считается комментарием.
Модификаторы
Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.
Любые строки, начинающиеся со слова stena. Строка, начинающаяся со слова dom-stena не удовлетворит критерию.
Любые строки, заканчивающиеся набором символов stena. Строка, заканчивающаяся на stena-dom под выбор не попадёт.
Любой символ повторяется любое количество раз. Под критерий попадут все строки.
Выбрать все строки, оканчивающиеся от 1 до 6 цифами из диапазона от 0 до 9.
Важно! Так как модификатор жадный, то в первую группу попадёт максимальное количество символов, удовлетворяющих шаблону. Слеш является таким же символом, как и все остальные.
Флаги
Проверки
В условиях могут быть использованы следующие проверки:
1. Вы можете предварить шаблон символом ‘!’, чтобы обозначить несоответствие шаблону.
2. Можно выполнить лексикографическое сравнение строк:
= Условие | Лексикографически больше или равно |
3. Сравнение, как целых чисел:
4. Тест на различные атрибуты файлов:
5. Все эти проверки также могут быть предварены префиксом восклицательный знак (‘!’) для инвертирования их значения.
Переменные
Логика исполнения правила (RewriteRule)
Исполнение же правила подразумевает следующие действия: первым делом механизм преобразования выполняет поиск дополнительных условий для этого правила (RewriteCond директивы). Помним, что по историческим причинам дополнительные условия находятся перед правилами(RewriteRule). Если дополнительные условия для этого правила отсутствуют, то механизм преобразований тупо выполняет указанное в правиле преобразование текущего URL и переходит к следующему правилу. Однако если для исполняемого правила (RewriteRule) существуют дополнительные условия, указанные ПЕРЕД НИМ в директивах RewriteCond, то запускается внутренний цикл для обработки этих дополнительных условий в том порядке, в котором они перечислены, сверху вниз.
Если из имеющихся для правила дополнительных условий хотя бы одно условие НЕ выполняется это приводит к остановке запущенного процесса исполнения правила, и преобразование над URL, заданное в правиле, НЕ выполняется. Что бы запущенное на исполнение правило выполнилось до конца и изменило URL, необходимо, что бы выполнились ВСЕ дополнительные условия, указанные в директивах RewriteCond перед этим правилом!
Тут нужно дополнительно пояснить, что директивы RewriteCond по умолчанию объединены между собой оператором AND в одно составное условие. Просто этот оператор(AND) не записывается по умолчанию. От сюда и такая логика, что нужно, что бы все дополнительные условия были истинными (т.к. они объедены через AND) для удачного завершения преобразования URL. Однако директивы RewriteCond можно объединить условием OR при помощи флагов (см. синтаксис директивы). Про это нужно помнить, при задании дополнительных условий.
Синтаксис директивы RewriteRule:
Параметры в правиле записываются в одну строку начиная с имени директивы и отделяются друг от друга пробелом.
Теперь давайте разберем пример правила RewriteRule:
Шпаргалки
Шпаргалка по mod_rewrite
Шпаргалка по mod_rewrite содержит список флагов для директив RewriteRule и RewriteCond, список серверных переменных, руководство по регулярным выражениям и несколько примеров общих правил.
Шпаргалка по регулярным выражениям
Шпаргалка представляет собой общее руководство по шаблонам регулярных выражений без учета специфики какого-либо языка.
Заключение
Также не забывайте оборачивать весь блок правил для mod_rewrite в тег:
Поэтому любой внешний ридирект всегда приводит к потере времени в обработки запроса, т.к. нужно отправить клиенту ответ, он должен его прочитать, и повторить запрос уже по новому URL. Это затратная по времени процедура. Поэтому ридиректы должны быть только если они действительно вам необходимы.
Что такое Rewriterule
Еще не зарегистрированы?
Очень часто владельцам сайтов требуется перенаправлять посетителей с разных адресов на определенную страницу. Это может быть связано с различными причинами, но чаще всего просто остается неиспользованный домен, который нужно пристроить. Так, например, ведется реклама какого-либо товара и вам нужно по клику на определенную ссылку перенаправить его на новый адрес или вовсе передать контент с главного сайта. Можно попросить администратора хостинга, чтобы тот сделал базу данных общей для обоих сайтов, но как быть с выделенным сервером? Здесь придется действовать самостоятельно, используя mod_rewrite сервера Apache. Он входит в состав правил RewriteRule, обеспечивающих вебмастеров большими возможностями.
Возникает рациональный вопрос: а что это такое, собственно говоря? Это специальный модуль сервера Apache, который позволяет выполнять какие-либо действия с URI. Но главной его задачей является перенаправление одного адреса на страницу с другим с целью привлечения большего количества посетителей на конкретную страницу. Модуль обеспечивает веб-мастеров большими функциональными возможностями. Программа обеспечивает оперативную обработку данных, гарантируя максимальное быстродействие.
Особенности модуля
Модуль mod_rewrite представляет собой программу, которая выполняется на сервере. Она содержит в своем составе синтаксический анализатор URI. Его особенность состоит в том, что он позволяет применять регулярные выражения, а также в его возможности входит использование разных источников данных при выполнении анализа ссылки. По факту программа может использовать несколько серверов или окружений, извлекая нужную информацию по определенным признакам. Например, HTTP-заголовки или даже запросы из других баз, используя при этом разные форматы.
С помощью правил RewriteRule пользователь получает возможность выполнять разные действия с URI:
В конечном результате после всех преобразований модуль Apache будет открывать не исходный адрес, а полученный после внесенных изменений. При этом пользователь сам определяет, как должны обрабатываться адреса. Он выбирает нужные действия при помощи установки специальных флагов и переменных. Окончательным результатом работы модуля mod_rewrite является внутренняя обработка адресной строки, внешнее перенаправление или использование внутреннего прокси-модуля.
На этом обработка адресной строки не заканчивается. Правилами RewriteRule предусмотрена возможность изменения поведения новой ссылки после ее преобразования. При этом он может быть как внешним, так и внутренним — соответственно, и перенаправление будет реализовано внутри сайта или на внешние ресурсы.
Если перенаправление URI было только внутренним, то посетитель сайта не заметит, что был перенаправлен на другую страницу. Более того, не изменится и ссылка в адресной строке. Она будет выглядеть статической. Сервер апачи работает очень быстро при обязательном соблюдении всех правил его использования RewriteRule. Фактически клиент указывал один адрес, а получил ответ от другого. Данный метод актуален для тех сайтов, в которых перенаправления реализованы в рамках одной базы данных со ссылкой в PHP на главную страницу index.php.
Существует еще один способ выполнения перенаправления посетителя. Это можно выполнить при помощи изменения ссылки непосредственно в браузере пользователя. В таком случае осуществляется отправка кода заголовка и называется эта функция redirect. Существует единая система кодов, каждый из которых определяет конкретные функции модуля. Например, код 301 Moved Permanently является ничем иным, как постоянной перенаправления.
Как было сказано ранее, можно выполнять перенаправление, в том числе, и на внешние сайты и внутренне прокси-серверы. Правилами RewriteRule предусмотрено множество действий, которые должны выполняться в результате перенаправления. Одним из них является запрет на выдачу нужных данных — например, в случае необходимости их временного сокрытия от распространения. Поведение ссылок задается специальными флагами, каждый из которых задает определенный порядок действий.
Важные моменты
Любые правила строятся на определенных постулатах. Так происходит и с модулем mod_rewrite, так как многие вебмастера считают его запутанным. На самом деле все достаточно просто, если часто применять знания на практике. Чтобы легче и быстрее освоить все функции программы, необходимо запомнить несколько важных моментов:
Исходя из сказанного, можно построить схему работы алгоритма преобразования URI от начала до получения результата. Она изображена на рисунке.
Построение синтаксиса директивы RewriteRule
Как и любой другой язык программирования, директива RewriteRule требует соблюдения определенного синтаксиса. В общем виде выражение выглядит следующим образом:
В файле данная строка будет выглядеть так:
На рисунке использованы следующие поля:
Указанный флаг в примере задает команду остановки любых преобразований. Если требуется добавить его в конец нового адреса, то параметр должен содержать строку «’qsappend|QSA’». Если начальный адрес содержит query string с GET-параметрами, то эта часть просто отбрасывается apache и не учитывается в дальнейшем при составлении нового адреса.
При составлении правил и условий в директиве RewriteCond также используются определенные переменные, задающие формат строки. Она может быть с GET-параметрами или с доменным именем. Их формат содержится в описании правил директивы. Параметр условия обычно содержит PB. Во флаге указывается принцип работы логики. Условия можно объединять операторами AND и OR, в зависимости от условий преобразования адресной строки.
Существующие переменные параметра флаг
Как правило, поле всегда предваряется строкой http:// thishost[:thisport]. Особенность преобразования состоит в том, что mod_rewite ее отсекает. Данная опция весьма полезна при формировании новых URI. Но при выполнении внешнего редиректа может стать настоящей проблемой. Для ее решения необходимо проставлять флаг [R]. Помимо данного параметра, также можно использовать ряд дополнительных.
redirect|R[=code]
Эта команда выполняет вызов редиректа. Если в Подстановке имеется ранее указанный префикс, то осуществляется запуск внешнего перенаправления. В противном случае будет выдан статус 302, который говорит нам о временном перемещении. При необходимости можно использовать все поле кодов от 300 до 400, вводя их непосредственно числовым значением. В этом случае следует использовать следующие имена:
Данный метод применим для выполнения преобразования виртуальных адресов в реальные. Также с его помощью можно добавлять слеш.
forbidden|F
Если использовать такое значение параметра флаг, то произойдет запрет на преобразование ссылки. Он обычно применяется для блокировки в директиве RewriteConds, когда используются дополнительные особые критерии сравнения.
gone|G
Если текущая ссылка не существует, то с помощью этого аргумента ее можно объявить мертвой. Далее она больше не будет преобразовываться. Пользователю будет отправлен HTTP со статусом 410. Можно удалить из базы несуществующие страницы или объявить их мертвыми.
proxy|P
Отработка этого оператора приведет к вызову прокси-модуля, при этом запрос помечается внутренним. Для его применения требуется рабочий прокси-модуль, который должен быть установлен на сервер Apache. Проверить его наличие достаточно легко. Для этого необходимо обратить внимание на строчку mod_proxy.c. Если она имеется, то Апачи поддерживает данный модуль.
last|L
Это последний алгоритм, который будет отрабатываться. Если он будет установлен в качестве параметра, то следующие правила не будут выполняться. Он имеет именно такое написание в языке Perl, или break — на языке C. Этот оператор рекомендуется использовать при преобразовании корневого адреса в действительный.
Также существуют и другие параметры:
Необходимо помнить, что условия директивы RewriteCond указываются перед условиями RewriteRule. Это важно, так как в противном случае они выполняться не будут.
Формат команды в директиве дополнительных правил имеет вид:
Пример строки с заданными параметрами будет выглядеть так:
Если требуется указать несколько условий, которые должны проверяться по отношению к текущему URI, то в параметре flags указывается тип оператора. Напомним, он может быть логическим И или ИЛИ в зависимости от ожидаемого после преобразования результата. Mod Apache подразумевает проверку адресных строк на ряд совпадений. А именно, строка анализируется и выясняется, не является ли она файлом стилей или программой сценариев. Эти проверки нужны для того, чтобы исключить ошибки в преобразовании, из-за которых могут теряться различные данные в базе.
Пример указания нескольких условий и их объединения одним из двух операторов рассматривать не будем, так как все и так предельно понятно.
Как видно из примера, в последнем блоке имеется директива RewriteRule. В ней указан флаг [F]. Он говорит нам о том, что ничего делать не нужно, если адрес имеет окончание, указанное в скобках в этой строке.
Напомним, что существует несколько способов перенаправления:
Если вы используете VirtualHost, то нужно понимать, что с ним директива RewriteRule работает несколько иначе. Отличия между ними состоят в следующем:
Пример составления регулярных выражений
При составлении решения нужно максимально минимизировать вероятность активации на другой запрос. Вот несколько рекомендаций:
Пример работы с внешним редиректом
На практике имеют место случаи, когда возникает бесконечный цикл перенаправлений. Это может произойти в результате неправильного выбора условий в выражениях. Данная ситуация возникает в случае, когда нужно сделать редирект с одной страницы на другую; при этом замена URI на желаемый и дальнейший редирект по каким-то причинном невозможны. Тогда программист использует выражение вида:
RewriteRule ^info.html information.html [R,L]
Это не приведет к должному результату, потому что возникнет обратное перенаправление на исходную страницу и так далее до бесконечности. Решение данной проблемы заключается в использовании дополнительной переменной окружения. Тогда полный пример будет выглядеть так:
RewriteRule ^info.html$ information.html [R,L]
RewriteRule ^information.html$ info.html [E=FINISH:1]
Также можно воспользоваться дополнительной проверкой запроса от посетителя сайта.
RewriteCond %
RewriteRule ^info.html$ information.html [R,L]
RewriteRule ^information.html$ info.html
Раскрытие ссылок
Часто возникают ситуации, когда происходит так называемое раскрытие ссылок. Это происходит автоматически, так как они закодированы специальным образом. Иногда это действие не требуется. В таком случае программисты прибегают к использованию переменной %
Полную информацию по редиректу можно найти в официальной документации на Apache. Более того, у каждого программиста она должна быть всегда под рукой, потому что существует много особенностей, которые запомнить просто невозможно.