Вход Регистрация |
Htaccess. правило RewriteRule: просто, понятно, с примерами и объяснениямиHtaccess. правило RewriteRule: просто, понятно, с примерами и объяснениями В файле .htaccess, который мы разместим в корневой папке каталога catalog/ записываем (файл .htaccess действует только на каталог где он расположен и на его дочерние каталоги): ![]() ^ Начало строки; ([A-Za-z0-9-]+) Скобки создают переменную, которую подставляем в динамическую ссылку $1. То есть Переменная $1 = ([A-Za-z0-9-]+) Переменная $2 = ([^/]+) Переменная $3 = (.*) Переменная $4 = ([0-9]+) В скобках [A-Za-z0-9-] класс допустимых символов. В данном случае допустимыми символами являются A B C D…Z a b c…z 0 1 2 3…9 – Если мы хотим добавить символы, например, ? ; : то получим следующее [A-Za-z0-9-?;:] то есть просто дописали их. + означает что мы добавляем еще один символ для подстановки. Выражение ([^/]+) означает любой символ кроме(^ означает кроме) слеша назад. + означает добавить еще символ. Выражение (.*) Точка означает любой единичный символ, * означает как и плюс – добавить еще символ. Выражение ([0-9]+) думаю, тут понятно. .html – означает что статическая строка оканчивается на .html Слеши / означают слеши в статической ссылке. Следует отметить, что данный мод преобразовывает ссылки не с динамической в статические ссылки а НАОБОРОТ! То есть, на сайте мы пишем статические ссылки, а мод рерайт преобразовывает статическую ссылку с сайта на динамическую. То есть представленную выше ссылку мы должны записать на сайте в виде статической: ![]() Которая и понятно нашим php скриптам и страницам сайта. Так же к выше изложенному правилу преобразования следует добавить правила для ссылки без переменной номера страницы page, а так же возможных вариантов с отсутствием переменных. RewriteRule ^([A-Za-z0-9-]+)/([^/]+)/(.*).html$ index.php?auto=$1&model=$2&state=$3 [L] RewriteRule ^([A-Za-z0-9-]+)/([^/]+).html$ index.php?auto=$1&model=$2 [L] RewriteRule ^([A-Za-z0-9-]+).html$ index.php?auto=$1 [L] Ниже приведу возможные обозначения и символы используемые в модуле MOD_REWRITE: . Любой одиночный символ. Если нам в круглых скобках нужна именно точка а не любой одиночный символ ее нужно экранировать . Обратный слеш экранирует какой либо символ [ ] ( ) ? > и т.п. и передает его истинное значение. [chars] Класс симвлолв: Один из символов например [A-Za-z0-9] {2,5}- фигурные скобки означают диапозон количества символов, в данном случае допускается от 2 до 5 символов. [^chars] Класс симвлолв: Ни один из символов. [^fg57] – символы f g 5 7 запрещены. text1|text2 Альтернатива: text1 или text2. например [a|b|c] означает или a или b или c Кванторы (символы для обозначения количественных отношений): ? 0 или 1 из предшествующего текста Означает либо есть символ или какое-то значение символов или их может не быть. * 0 или N из предшествующего текста (N > 0) + 1 или N из предшествующего текста (N > 1) макрос "$1" обозначает ту часть исходного пути, которая расположена внутри первой пары скобок "RewriteRule ^(.*)....." , $2 – внутри второй пары и так далее. Маркеры: ^ Маркер начала строки $ Маркер конца строки Пример RewriteRule с пояснениями: Дополнение: Бывает так, нужно сначала проверить, не является ли это ссылка на существующий файл на нашем сервере, например /catalog/webmaster/index.html может оказаться существующим файлом, но если эта ссылка попадет под соответствующее правило RewriteRule она согласно этому правилу преобразуется. Поэтому, если нам сначала нужно проверить, не является ли этот файл или директория прямая, нужно пред правилом RewriteRule написать условие если: Если нет такой папки Выглядеть это будет так: RewriteCond %{REQUEST_FILENAME} !-d Где, RewriteCond – условие если, %{REQUEST_FILENAME} – полный системный путь к запрашиваемому файлу или директории, Восклицательный знак ! означает отрицание не, -d – дериктория, -f – файл. Теперь, прежде чем применить правило RewriteRule, будет проверено условие RewriteCond P.S.: Так же по теме, может Вам будет интересно: Как сделать русскую URL как в Википедии Категория статьи: Веб-программирование | Просмотров: 106992 | Добавлена:
24.10.2012
Почему Вы еще не прокомментировали? Вывод комментарий: Yevgeniy говорит: Здравстыуйте. Руслан говорит: Первую часть вопроса решил вот таким правилом Руслан говорит: Подскажите как сделать следующее правило Сергей говорит: Добрый день! Помогите, пожалуйста! Как сделать чтобы вместо САЙТ/component/content/article/9-news/24-shedule-price было САЙТ/9-news/24-shedule-price, т.е. убрать /component/content/article . Заранее спасибо! Ответ: Ели у Вас уже есть (действующий) сайт с ссылками: САЙТ/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 и редиректом перенаправлять со старых ссылок на соответствующие новые. То есть: Евгений говорит: Если знаете, подскажите пожалуйста. Александр говорит: Надо сделать 301 редирект Влад говорит: Спасибо. Я сперва так и сделал без http_host, но меня стало редиректить к адресу прямо от корня веб-сервера -/home/site/public/ тра-ля-ля и так далее. Еще раз спасибо за статью. Без нее не разобрался бы. Влад говорит: Спасибо за статью. Ответ: Если Вы редиректите на этот же домен, %{HTTP_HOST} можно опустить: Shem говорит: Здравствуйте! отличная статья - открывает глаза новичкам. Прописал правило: Князь Васин говорит: Подскажите пожалуйста, как вот сюда еще редирект запихнуть? Ответ: Желательно написать реальный пример, откуда куда редиректить Дмитрий говорит: Не совсем)Там я большое сообщение написал, но отобразилась только часть его. В любом случае проблема уже решена, еще раз спасибо за статью. Vlad говорит: Класс, реально спасибо. Сергей говорит: Спасибо огромное за статью! Ответ: А так? Вообще, суть данного у тебя редиректа заключается в отлавливании GET переменной firma_kond=11 (и только! То есть на firma_kond=11&page=2 условие не сработает, я думаю ты понимаешь почему). При обнаружении: split_systems_daikin.php?firma_kond=11 срабатывает правило: Принц Игорь говорит: Спасибо за отличный материал. У меня вопрос. Есть сайт - (site.com), есть страница - (site.com/stranica.html), есть необходимость вывести эту страницу двумя ссылками, 1-вышеуказанной, 2-с добавлением преффикса (prefiks.site.com/stranica.html). Создал поддомен prefiks.site.com (папку почистил, что-бы не занимать место той-же инфой). Как сделать редирект, что-бы при открытии (в поисковиках) ссылки prefiks.site.com, переходило на prefiks.site.com/stranica.html Ответ: Уточните вопрос, мне кажеться Вы хотите перенаправлять с site.com на prefiks.site.com ? Дмитрий говорит: Спасибо огромное за статью! На теоретическом уровне всё встало на свои места, однако на практике возникли осложнения. Прописал в файле .htaccess правило: Ответ: RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)\.html$ index.php?category=$1 [L] Алексей говорит: Спасибо за понятное разъяснение. Уже сколько лет занимаюсь сайтодельней, но с перенаправлениями приходится работать впервые. Ваша статья - лучшая! rni говорит: Вроде нашел решение rni говорит: У меня раньше сайт был в директории wp, потом был перемещен в корень... (глупость сделал конечно) Ответ: Можно простым редиректом: RewriteRule ^wp/(.*)$ /$1 [R=301,L] Артём говорит: Спасибо за статью! Подскажите, как сделать чтоб ссылка НЕ заканчивалась расширением (.html) или слэшем? Dark говорит: Спасибо, отличная статья, возник только вопрос по: Ответ: Совершенно верно. Спасибо за то, что указали на этот недочет. Слава говорит: Здравствуйте! Княгиня chooch говорит: спасибо, самая подробно и понятно написанная статья по теме Александр говорит: Блин не входят большие комментарии Александр говорит: с использованием чпу не отображаются стили сбивается путь к файлу добавляются как бы папки которые вы пишите в ссылке. Решил проблему так Администратор: Александр, для того, что бы не сбивались пути к файлам, всегда указывайте путь от корня сайта (начинайте ссылку со слеш): href="/css/index.css" Король Леонид говорит: Огромное спасибо, три раза уже пытался разобратся с ЧПУ. Все форумы переситал но ничего не смог понять, птому как вся проблема в том что данный мод преобразовывает ссылки не с динамической в статические ссылки а НАОБОРОТ! А об этом никто ничего не пишет. Спасибо за разъяснение! Diego говорит: Огромнейшее спасибо за статью, всё то что нужно и понятно! Князь великий сия земель Ветроподувайко говорит: и 1 за величать в коментах) очень симпотно Князь Ветроподувайко говорит: Дякую! Змістовно і зрозуміло пояснено. Сударь Александр говорит: Спасибо за статью) все максимально просто и подробно расписано) |
Сударь Дядька говорит:
Здрастье
Есть такая задачка
Есть несколько субоменов вида host1.domen.ru, host2.domen.ru, host3.domen.ru проассоцииованные с соответствующими виртуалхостами в апаче
Есть главная страничка, открывающаяся по www.domen.ru
Нужно, что бы при открытии www.domen.ru/host1 перебрасывало на host1.domen.ru, ну и так далее по списку..
Причем сама адресная строчка http://www.domen.ru/host1 при этом меняться не должна.
Как это сделать? Подскажите, пожалуйста, граждане судари!