Форум программистов, компьютерный форум, киберфорум
Интернет-маркетинг, SEO
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/137: Рейтинг темы: голосов - 137, средняя оценка - 4.78
Регистрация: 28.04.2006
Сообщений: 739

мануал по mod_rewrite

17.05.2006, 04:53. Показов 25025. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что такое mod_rewrite и с чем его едят. Так вкратце можно охарактеризовать данную статью. В материале затронута настройка и основные принципы работы модуля mod_rewrite. Примеры снабжены подробными объяснениями.
С ростом сложности веб-приложений появляется необходимость в создании различных комманд от пользователя, или запросов. Как правило, это достигается при помощи создания необходимого URL, например, такого вида:

http://localhost/index.shtml?page=1&book=2...=1&tmpl=newsall

Подобные запросы пользователь Интернет видит каждый день. Более того, подсознательно он пытается из запоминать, чтобы впоследствии изменять его вручную, добиваясь нужной информации от сайта. Но посмотрите ещё раз на этот URL: что-нибудь понятно? Почти нет. Легко ли запомнить такой адрес - нет. Приятно ли наблюдать этот набор букв и цифр в адресной строке браузера? Тоже нет.
Как решить эту проблему? Существует несолько способов избежать использования громоздких URL. Я постараюсь рассмотреть один из них, самый правильный, на мой взгляд: ModRewrite. Так называется дополнительный модуль для популярного веб-сервера Apache, доля которого на рынке веб-серверов составляет более 70%. Этот модуль содержится в стандартной поставке сервера. Но как правило, он обычно отключен.
Для начала, убедимся, что ModRewrite включен. Для этого, откроем конфигурационный файл сервера Apache - httpd.conf в любом текстовом редакторе и найдём такие строки:

#AddModule mod_rewrite.c
и
#LoadModule rewrite_module modules/mod_rewrite.so

Если перед ними находится символ # - удалите его и перезапустите сервер. Модуль начнет функционировать.
Далее необходимо "включить" ModRewrite для конкретного вебсайта. Для этого в этом же файле, httpd.conf, в разделе описания конфигурации вебсайта добавляем такую команду:

RewriteEngine On

Например, в описании виртуальной директории:

<Directory D:/Internet/web/rewr/>
Options Indexes FollowSymlinks MultiViews
RewriteEngine On # добавляем
AllowOverride All
Order allow,deny
Allow from all
</Directory>

Включить ModRewrite можно и при помощи файла локальных настроек сайта - .htaccess. Пример содержимого .htaccess:

order allow,deny
allow from all
Options -Indexes
RewriteEngine On # добавляем

Самое главное мы сделали. Теперь рассмотрим несколько примеров того, что нам может дать ModRewrite.

Пример 1. Новости.

Предположим, на вашем сайте доступ к новостям осуществляется посредством такого запроса:
[quote]
http://localhost/index.php?sho... th=9&day=7

В результате мы отображаем новости за 7 сентября 2002г. Оформим это запрос при помощи ModRewrite, чтобы он выглядел как

http://localhost/news/2002/9/7/

Изменим файл .htaccess следующим образом:


RewriteEngine On
# добавляем
RewriteRule ^([a-z]+)/([0-9]*)/([0-9]*)/([0-9]*)/$ /index.php?show=$1&year=$2&month=$3&day=$ 4

Разберёмся. Строкой ^([a-z]+)/([0-9]*)/([0-9]*)/([0-9]*)/$ мы задаём формат нового запроса - /news/2002/9/7/. (Эта строка - не что иное, как Regular Expression, мощный формат для записи шаблонов текста и поиска по нему.) $1,$2,$3,$4 - пронумерованные результаты поиска в строке запроса.
Строка /index.php?show=$1&year=$2&month=$3&day=$ 4 - это запрос, который мы используем внутренне, для удобства программирования. Как видим, он остался прежним, но пользователь (!) уже не увидит его. Для него доступ к новостям теперь будет осуществляться в удобном виде - /news/2002/9/7/.
В целях отладки лучше изменить команду RewriteRule, добавив [R] в конце строки:

RewriteRule ^([a-z]+)/([0-9]*)/([0-9]*)/([0-9]*)/$ /index.php?show=$1&year=$2&month=$3&day=$ 4 [R]

Тогда после запроса /news/2002/9/7/ в адресной строке мы увидим наш старый URL /index.php?show=news&year=2002&month=9&da y=7. [R] даёт команду ModRewrite перенаправить (redirect) запрос.

Пример 2. Подмена страницы в зависимости от браузера.

Иногда возникает необходимость "подсовывать" разные страницы в зависимости от пользовательского браузера.
Изменим файл .htaccess:

RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^page\.html$ page_mozilla.html [L]
RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule ^page\.html$ page_lynx.html [L]
RewriteRule ^page\.html$ page_other.html [L]

Разберёмся. Команда RewriteCond - это условие для ModRewrite, означающее, что подстановка RewriteRule будет осуществлена только при соблюдении вышестоящего условия RewriteCond. В данном случае, браузерам, определяющим себя как Mozilla, при запросе файла page.html будет отдана страница page_mozilla.html. Пользователям Lynx - страница page_lynx.html. Всем остальным будет показана страница page_other.html. Директива [L] (last) даёт указания прекратить обработку дальнейших комманд ModRewrite.

Пример 3. Виртуальные домены для пользователей.

Предположим, что необходимо создать под-домен для каждого пользовательского каталога вашего сайта: чтобы адрес вида http://www.website.net/vasya/ (где vasya - пользовательский каталог) выглядел как http://www.vasya.website.net/.
Посмотрим на необходимую конфигурацию .htaccess:

RewriteCond %{HTTP_HOST} ^www\.[^.]+\.website\.net$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.website\.net(.*) /$1$2

Разберёмся. Условие RewriteCond даёт указания обрабатывать следующие команды RewriteRule только в том случае, если запрос имеет вид http://www.vasya.website.net/ (HTTP_HOST - это переменная сервера Apache, содержащая в себе текущий хост, или домен). Далее следует правило для обработки подкаталогов, например http://www.vasya.website.net/about/. Директива [C] (chain) означает, что следующая команда RewriteRule будет выполнена только при условии выполнения предыдущей команды. В результате, запросив адрес http://www.vasya.website.net/about/, мы получим содержимое страницы, находящейся по адресу http://www.website.net/vasya/about/.
Такая организация пользовательских каталогов помогает избежать создания многочисленных виртуальных хостов, что очень удобно, если пользователей десятки и сотни.
Резюме. Изучив более подробно механизм ModRewrite, а также синтаксис Regular Expression, можно создавать всевозможные обработки запросов и преподносить их в удобоваримом виде.

ЗЫ не помню откуда статья, но очень качественна и понятна... всем удачи с mod_rewrite))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2006, 04:53
Ответы с готовыми решениями:

mod_rewrite!
Начну с того, что я новичок в этом деле :). Вообщем, имеем ссылку &lt;a href=&quot;?tip=1&quot;&gt;About us&lt;/a&gt; в файлике .htaccess прописал...

mod_rewrite (Help!!!)
Помоги с mod_rewrite, плз. Сделал такую штуку: RewriteRule ^mod/(.*)$ index.php?mod=$1 RewriteRule ^mod/users/(.*)$...

Mod_rewrite
Практикуюсь в написании чпу, собственно почти весь сайт перевёл в чпу и всё замечательно, в ajax запросе при удалении товара посылается...

17
Регистрация: 12.04.2006
Сообщений: 613
17.05.2006, 08:00
А как это относится к тебе Оптимизации? Может стоило бы в Мастерскую?
0
Регистрация: 03.01.2006
Сообщений: 139
17.05.2006, 08:15
на моем хостере ^(чего-то там) не шло хотело так ^/(чего-то там) ...
видимо путь он считал как домен.ru[/куда_хотим.htm]
хотя на другом все было нормально ...
0
Регистрация: 12.04.2006
Сообщений: 613
17.05.2006, 08:29
на моем хостере ^(чего-то там) не шло хотело так ^/(чего-то там) ...
видимо путь он считал как домен.ru[/куда_хотим.htm]
хотя на другом все было нормально ...
А ты RewriteBase пользовал?
0
Регистрация: 03.01.2006
Сообщений: 139
17.05.2006, 08:43
А ты RewriteBase пользовал?
Описалово было примерно такое-же ^^^^ и как и в этом про Base молчек :)
поэтому голову не напрягал, поставил палочку и пошел пить пиво ... :D
при переносе на другой хост убрал палочку и ... :D :D
0
Регистрация: 12.04.2006
Сообщений: 613
17.05.2006, 08:57
поэтому голову не напрягал, поставил палочку и пошел пить пиво ...
Тоже решение :)
0
Регистрация: 03.01.2006
Сообщений: 139
17.05.2006, 09:11
Да про палку запостил вдруг кто нарвется, будет нервничать,курить,волосы рвать особенно если с регуляркой не особо, ошибки искать, полдня матерясь ... :D :D :D
0
Регистрация: 08.07.2006
Сообщений: 1,272
01.04.2007, 09:25
Вопрос!
Почему при первом заходе на сайт модреврайт не пашет?
Все ссылки имеют первоначальный вид, типа:
http://www.site.ru/hotels/?PHPSESSID=dd295...828cfbf3332af32
И только после обновления страницы ссылке уже имеют нормальный вид типа:
http://www.site.ru/hotels/

Поисковики значит тоже будут видить полный путь... а хначит все ссылки на
http://www.site.ru/hotels/ окажутсья бесполезными...

Подскажите?
0
Регистрация: 03.01.2006
Сообщений: 275
01.04.2007, 09:40
ppalachh,
Это не mod_rewrite виноват, он всегда пашет. Нужно сессии отключать.
Или в куках хранить.
0
Регистрация: 24.11.2006
Сообщений: 44
01.04.2007, 09:54
<?php
# Блок для отображения новостных разделов

defined('SPAIZ_CODE') or die('Direct Access to this location is not allowed.');

global $prefix, $dbi;

$content ='';
//$content .= '<FORM NAME="news_view" METHOD="POST" action="modules.php?name=News&file=viewn ews">';
$i = strtoupper(a);
for($n=0; $n<26; $n++)
{
$content .= ' [URL="newstext'.$i.'.html">[b]'.$i++.'[/b]</a> ';
}
$k = strtoupper(0);
for($l=0; $l<10; $l++)
{
$content .= ' [URL="newstext'.$k.'.html">[b]'.$k++.'[/b]</a> ';
}
$content .='
';
$alf = array('А','Б','В','Г','Д','Е','Ё','Ж','З ','И','Й','К','Л','М','Н','О','П','Р','С ','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ы','Ь ','Ъ','Э','Ю','Я');
foreach ($alf as $name_value)
{
$content .= ' [URL="modules.php?name=News&file=viewnews &text='.strtoupper($name_value).'">[b]'.strtoupper($name_value).'[/b]</a> ';
}
?>
Есть такой блок...проблема в том что если сделать для русских букв newstext='.strtoupper($name_value).'.htm l не будет работать. Что делать?
0
Регистрация: 08.07.2006
Сообщений: 1,272
02.04.2007, 10:08
ppalachh,
Это не mod_rewrite виноват, он всегда пашет. Нужно сессии отключать.
Или в куках хранить.
Спосибо, я уже понял..)
0
Регистрация: 17.10.2006
Сообщений: 21
02.04.2007, 10:22
Есть такой блок...проблема в том что если сделать для русских букв newstext='.strtoupper($name_value).'.htm l не будет работать. Что делать?
Курить доки :)
strtolower(), strtoupper(), ucfirst(), ucwords()
При конвертации символов кириллицы могут быть недоразумения.
Для правильного преобразования вставить вверху кода:
setlocale(LC_CTYPE , "ru_RU.CP1251") или
setlocale(LC_CTYPE , "ru_RU")
0
Регистрация: 12.02.2006
Сообщений: 230
02.04.2007, 10:36
Для начала, убедимся, что ModRewrite включен. Для этого, откроем конфигурационный файл сервера Apache - httpd.conf в любом текстовом редакторе и найдём такие строки:

#AddModule mod_rewrite.c
и
#LoadModule rewrite_module modules/mod_rewrite.so

Если перед ними находится символ # - удалите его и перезапустите сервер. Модуль начнет функционировать.
Что за бред? Если модуль закоментирован, то апач скорее всего без него компилился. А убирание решоточек в большенстве случаев результата не дает...
0
Регистрация: 26.05.2007
Сообщений: 104
26.05.2007, 10:50
Ребята почему код не работает?

RewriteEngine On
RewriteCond %{HTTP_HOST} ^.*forum\.domen\.ru [NC]
RewriteRule ^(.*) http://domen.ru/bank/$1 [P,L]



Сайт domen.ru
Поддомен forum.domen.ru
Хочу поставить в поддомен например domen.ru/bank
0
Регистрация: 05.02.2007
Сообщений: 251
26.05.2007, 11:05
ТС, респект! Хорошо написал.
0
Регистрация: 19.02.2007
Сообщений: 170
25.07.2007, 11:19
У меня есть урл вида www.sait.ru/folder/index.php?somevar=slovo
Как сделать урл вида www.sait.ru/folder/slovo/
Уже все перепробовал, не полочается. Помогите?
0
Cip_VEPUC
15.08.2007, 11:33
У меня такой вопрос. В корне сайта есть файл .htaccess в котором вот что:
RewriteEngine on
RewriteBase /
RewriteRule ^([^i])(.*)|(i)([^n].*|n([^d].*|d([^e].*|e([^x].*)?)?)?)$ %0/index.php?url=$0&%{QUERY_STRING}&TMP={SE RVER_NAME}

также в корне сайта есть папка catlog для которой мне надо сделать вот такое правило:
RewriteRule ^([0-9]+)(?:/([0-9]+)?(?:/([a-z]+)(?:/(.+?)_([0-9]+)\.html)?)?)?$ /catlog/index.php?menu_id=$1&category_id=$2&page =$3&$4_id=$5

Я сделал в папке catlog еще один файл .htaccess и добавил туда это правило, но оно не работает, все равно работает 1-е правило.
Что мне надо прописать, что бы для этойпапки было свое соответствующее правило ?
chomdog
29.08.2009, 11:47
Подскажите пожалуйста как правильно написать редирект чтоб с ссылки
cgi-bin/index.cgi?num_edit=1014
юзер переправлялся на
index.php?option=com_content&view=articl e&id=19&Itemid=8
Я написал так
Redirect cgi-bin/index.cgi?num_edit=1014 http://site.ru/index.php?option=com_conten...19&Itemid=8
но не работает :(
если написать так
Redirect /cgi-bin/index.cgi http://site.ru/index.php?option=com_conten...19&Itemid=8
то работает, но мне нужно именно по cgi-bin/index.cgi?num_edit=1014 (вопросик, и всё после него на обрабатывается)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.08.2009, 11:47
Помогаю со студенческими работами здесь

mod_rewrite
Папка url имеет такой адрес: C:\wamp\www\url Создал файл .htaccess, в котором прописал: RewriteEngine On RewriteBaxe /url ...

Mod_rewrite
Написал такие 3 правила RewriteRule ^(.*)/()/()$ reader.php?comics=$1&amp;ch=$2&amp;page=$3 RewriteRule ^(.*)/()$...

mod_rewrite
здрасте. Помогите разобраться. Есть вот такая ссылка http://siat.ru/profile.php?id=76561198079297586 Я хочу...

mod_rewrite
Добрый день. У меня такая проблема. Есть ссылка http://sait.ru/matches.php?id=234234234&amp;mtc=23 Можно ли из неё сделать ? ...

Mod_rewrite
Доброго вечера. Подскажите, пожалуйста, почему у меня не получается получить строку полностью. .htaccess &lt;IfModule...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru