Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » mod_rewrite: документация, готовые решения, вопросы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

Открыть новую тему     Написать ответ в эту тему

Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mod_rewrite

Вот уже несколько раз встретился с этим вопросом. Недавно в тех. задании было указано что проект должен быть оптимизирован под поисковые системы. Поискав немного попал на mod_rewrite. Оказывается что mod_rewrite очень и очень полезная вещь. Вот несколько причин почему я решил разобраться с данным зверем:
 

  1. Если вы пишите форумы, сайт с новостями или любой сайт в котором есть конструкция hттp://mybestsite.com/article.php?n=3&page=1. Вы рано или поздно встретитесь с проблемой лицом к лицу, у таких сайтов есть огромный минус: адрес сайта выглядит для пользователей не "нормально", такой адрес не индексируется многими поисковыми системами, удаляется все после знака "?". Ниже приведенные ссылки для него все одни, но просмотрев их он получает разное содержимое (Что плохо сказывается на статистику вашего сайта)

    Код:
    hттp://mybestsite.com/article.php?n=3&page=1
    hттp://mybestsite.com/article.php?n=5&page=2
    hттp://mybestsite.com/article.php?n=6&page=7

    Пользователи у которых нету базовых знаний в Web программировании не могут понять что значит текст после article.php (?n=3&page=1). С использованием mod_rewrite можно на лету преобразовывать адреса типа

    Код:
    hттp://mybestsite.com/article.php?n=3&page=1

    в такой, более понятный и привычный для обыкновенных пользователей

    Код:
    hттp://mybestsite.com/articles/3/page1.htm

    А самое интересное что файл page1.htm вообще не существует, и пользователю не известен путь к файлу к которому он обращается и поисковые системы воспринимают такой адрес как обыкновенную ссылку на html страничку.
     
  2. С помощью mod_rewrite можно запретить скачивать ваши материалы с других сайтов, на собирание которых вы провели бессонные ночи. Например: у вас есть файл bestprogram.zip, у вас на страничке есть линк

    Код:
    <a href="hттp://mybestsite.com/download/bestprogram.zip">Download</a>

    какой-то придурок залазит на ваш сайт, просмотривает html код вашей странички и размещает туже ссылку но уже у себя на сайте.

    Код:
    <a href="hттp://mybestsite.com/download/bestprogram.zip">Download</a>

    и она будет работать без проблем, за трафик будет платить вы а слава и благодарности этому придурку! С помощью mod_rewrite можно запретить cкачивание файлов если referer не ваш сайт

 
Думаю этого достаточно что бы потратить несколько часов на изучение данного материала. Ниже привожу документацию по данному вопросу:
Русские ресурсы

Английские ресурсы

 
Необходимые навыки:

 
Настройка журналирования (Лога):
 
Чтобы включить лог mod_rewrite необходимо в описании вашего виртуального хоста (обычно это файл httpd.conf) добавить две строчки:  

Код:
Код:RewriteLog /путь/к/лог/файлу  
RewriteLogLevel 9  

И перезапустить апача. Крайне не рекомендуется производить это на работающем сервере, так как объемы отладочной информации генерируются действительно большие и найти свое бывает очень сложно.
 
ps: Доп ссылки
Много полезных примеров, но на английском http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html




PHP тут не совсем к месту в названии, потому убрал /Cheery/

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 15:26 24-06-2005 | Исправлено: Cheery, 01:07 11-10-2011
Ludovick

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброй ночи,
 
помогите плиз разрулить парковку доменов. в панели управления этими доменами записи сделал, в управлении хостингом домены запарковал.
 
 
htaccess выглядит вот так:
 
 
DirectoryIndex index.php
 
RewriteEngine On
 
RewriteBase /
 
RewriteCond %{REQUEST_FILENAME} !-f
 
RewriteCond %{REQUEST_FILENAME} !-d
 
RewriteRule ^(.*) index.php
 
RewriteCond %{HTTP_HOST} ^(www\.)?name1\.com$ [NC]  
RewriteRule ^$ /index.php [QSA,L]  
 
RewriteCond %{HTTP_HOST} ^(www\.)?name2\.com$ [NC]  
RewriteRule ^$ /index.php [QSA,L]  
 
 
 
нужно чтобы name1.com, name2.com приходили в корень моего хостинга  
Но по-прежнему ни фига не работает...
потому что ни бельмеса в этом не понимаю.

Всего записей: 244 | Зарегистр. 29-11-2004 | Отправлено: 02:28 14-10-2006 | Исправлено: Ludovick, 02:38 14-10-2006
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ludovick

Цитата:
потому что ни бельмеса в этом не понимаю.

потому что читать мануалы сначала нужно..  
 

Цитата:
RewriteCond %{HTTP_HOST} ^(www\.)?name1\.com$ [NC]  
RewriteRule ^$ /index.php [QSA,L]  
 
RewriteCond %{HTTP_HOST} ^(www\.)?name2\.com$ [NC]  
RewriteRule ^$ /index.php [QSA,L]

какой смысл? да и вообще, что тебе мешает просто переадресацию прямиков через redirect??
если нет доступа к httpd.conf, то в папке, на которую указывают другие домены, создается htaccess с  
Redirect /   http://www.domain.ru


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:41 14-10-2006
Ludovick

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я решил вопрос с помощью файла index.html - простой редирект на index.php в этой же папке. и DirectoryIndex прописал index.html. домены сразу заработали.

Всего записей: 244 | Зарегистр. 29-11-2004 | Отправлено: 19:00 15-10-2006 | Исправлено: Ludovick, 19:01 15-10-2006
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ludovick

Цитата:
я решил вопрос с помощью файла index.html - простой редирект на index.php в этой же папке. и DirectoryIndex прописал index.html. домены сразу заработали.

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

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:22 15-10-2006
CoolKonig



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как написать правило для ссылок:
http://domain.com/category.php?number=4
http://domain.com/subcategory.php?number=2
такого вида:
http://domain.com/category/4
http://domain.com/subcategory/2
 
Я вот так вот делаю:
RewriteRule ^([a-z]+)/([0-9]*)/$ ?number=$1
 
Но не работает почему-то...

Всего записей: 102 | Зарегистр. 12-10-2005 | Отправлено: 10:24 23-10-2006
phpbbmods

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CoolKonig  
RewriteRule ^([a-z]+)/([0-9]*)/$  /subcategory.php?number=$1  
так
http://domain.com/category/4/
а так  
RewriteRule ^([a-z]+)/([0-9]*)$ /subcategory.php?number=$1

Всего записей: 322 | Зарегистр. 09-02-2004 | Отправлено: 11:03 23-10-2006
CoolKonig



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
RewriteRule ^([a-z]+)/([0-9]*)/$  /subcategory.php?number=$1   так  http://domain.com/category/4/  а так   RewriteRule ^([a-z]+)/([0-9]*)$ /subcategory.php?number=$1

что-то по прежнему не работает. Хотя сам mod_rewrite другие правила обрабатывает... кстати вот с таким правилом работает:
RewriteRule ^([0-9]*)\.html$ /subcategory.php?number=$1
тогда допустим ссылка вида domain.com/2.html все нормально открывает... В логах ничего не пишет =\

Всего записей: 102 | Зарегистр. 12-10-2005 | Отправлено: 11:30 23-10-2006 | Исправлено: CoolKonig, 11:36 23-10-2006
phpbbmods

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CoolKonig
у меня так работает на ура

Код:
 
RewriteEngine On
Options +FollowSymlinks  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$             /www.php?url=$1 [L,QSA]
RewriteRule ^(.*)/([0-9]+).html$ /www.php?url=$1&page=$2 [L,QSA]
 

www.php?url=$1 - ставлю /name/
www.php?url=$1&page=$2 - ставлю /name/1.html

Всего записей: 322 | Зарегистр. 09-02-2004 | Отправлено: 20:17 24-10-2006
vitovt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
какой смысл? да и вообще, что тебе мешает просто переадресацию прямиков через redirect??  
если нет доступа к httpd.conf, то в папке, на которую указывают другие домены, создается htaccess с  
Redirect /   http://www.domain.ru  

 
а у меня вот такая проблема, просто у домена есть алиасы и нужно чтоб каждому алиасу соответствовал свой Rule потому как и поддомены у меня подчинаються главному .htaccess

Всего записей: 1087 | Зарегистр. 02-05-2002 | Отправлено: 11:33 25-10-2006
SplideX



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите как сделать такой финт.
Я хочу сайт положить в папку /htdocs/site/
чтобы не захламлять корень.
Как это сделать грамотно? Чтобы не затрагивать поддомены и т.п.?
Т.е. когда обращаешься к www.site.com или просто site.com, то файлы берутся из директории /htdocs/site/, а не /htdocs/

----------
О себе:
Маркетолог - Блог о Маркетинге, Продажах, Рекламе

Всего записей: 1725 | Зарегистр. 15-01-2002 | Отправлено: 17:10 31-10-2006
abarat

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пишу правило для ссылок:  
http://site.com/index.php?m=10&y=2006
http://site.com/calendar.php?date=2006-11-18
 
такого вида:  
http://site.com/calendar/10-2006  
http://site.com/calendar/2006-11-11
 
пишу так:  
RewriteRule ^(.*)calendar/([0-9]{1,2})-([0-9]{4})$ $1?m=$2&y=$3
RewriteRule ^(.*)calendar/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$ $1calendar.php?date=$2-$3-$4  
 
На локальном серваке (Апач под ВинХР) все работает, а на серваке провайдера не хочет. При этом http://site.com/index.php?tab=teatr ->  http://site.com/teatr/ работает
 
RewriteRule ^(.*)teatr/$ $1index.php?tab=teatr
 
в чем проблема?

Всего записей: 1 | Зарегистр. 03-11-2006 | Отправлено: 15:19 03-11-2006
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
abarat
 
Попробуй так:

Код:
 
RewriteRule ^(.*)calendar/([0-9]{1,2})-([0-9]{4})$ $1index.php?m=$2&y=$3  
RewriteRule ^(.*)calendar/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$ $1calendar.php?date=$2-$3-$4  
 

 
 

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 13:36 04-11-2006
batton

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помощи.
Мне нужно чтобы по ссылке mysite.ru/lib пользователя перенаправляло на mysite.ru/index.pl?box=lib
/lib - директория в которой есть поддиректории с файлами. они должны открыватся
 
пишу .htaccess в директории lib
RewriteRule ^/$ /index.pl?box=lib [R]
 
в результате - forbidden. в логах написано что якобы не включен FollowSymLinks, однако в htaccess он включен
сейчас, временно, реализовал через html-страницу которая назначена как индексная для данной директории

Всего записей: 83 | Зарегистр. 18-08-2004 | Отправлено: 17:18 05-11-2006
Brodyaga



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Писать нужно в корневой директории
RewriteRule /lib/ index.pl?box=lib

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 17:24 05-11-2006
CoolKonig



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не могу привести ссылку вида:

Код:
http://domain.com/ru/office/file.php?edit=file.txt

 
К виду:

Код:
http://domain.com/office/file.php?edit=file.txt&language=ru

 
Вот так правило выглядит:
 

Код:
RewriteRule ^ru/office/([0-9A-Za-z]{3,30})\.php(.*)$ /office/$2&language=ru [R]

 
Почему-то приводит к такому виду!
 

Код:
http://domain.com/office/file.php&language=ru?edit=file.txt

 
Т.е &language=ru ставит вперед, хотя по правилу эта часть последняя.
Покажите какие у меня ошибки. Премного благодарен!

Всего записей: 102 | Зарегистр. 12-10-2005 | Отправлено: 13:57 12-11-2006
Kolderon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CoolKonig

Код:
RewriteRule /ru/office/([0-9A-Za-z]{3,30}\.php.*)$ /office/$1&language=ru

 
А если у вас будет несколько языков, обозначенных двухбуквенными кодами, то лучше так:

Код:
RewriteRule /([A-Za-z][A-Za-z])/office/([0-9A-Za-z]{3,30}\.php.*)$ /office/$2&language=$1

 
Честно говоря, ваша конструкция ([0-9A-Za-z]{3,30})\.php несколько странная. Но если вам так нужно...

Всего записей: 109 | Зарегистр. 20-01-2005 | Отправлено: 15:19 12-11-2006
CoolKonig



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kolderon

Цитата:
 
Код:
RewriteRule /([A-Za-z][A-Za-z])/office/([0-9A-Za-z]{3,30}\.php.*)$ /office/$2&language=$1  
 
Честно говоря, ваша конструкция ([0-9A-Za-z]{3,30})\.php несколько странная. Но если вам так нужно...
 

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

Код:
http://domain.com/office/file.php&language=ru?edit=file.txt

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

Всего записей: 102 | Зарегистр. 12-10-2005 | Отправлено: 19:02 12-11-2006 | Исправлено: CoolKonig, 19:03 12-11-2006
Kolderon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CoolKonig
Все куда интересней. Во-первых:

Цитата:
RewriteRule "исходный путь" "замена" "флаги"
Исходный путь - это часть исходной ссылки, от которой отрезаны имя сервера, путь до текущего каталога и параметры запроса.

Во-вторых:

Цитата:
Флаг QSA (qsappend) добавляет исходные параметры запроса (query string) к замене. Если замена не включает в себя новые параметры запроса, то исходные параметры запроса добавляются автоматически. Если же включает, то без флага QSA исходные параметры запроса будут утеряны.

Поэтому, тебе следует писать правило так:

Код:
RewriteRule ^([A-Za-z][A-Za-z])/office/([0-9A-Za-z]{3,30}\.php)$ office/$2?%{QUERY_STRING}&language=$1

Или так:

Код:
RewriteRule ^([A-Za-z][A-Za-z])/office/([0-9A-Za-z]{3,30}\.php)$ office/$2?translation=$1 [QSA]

Цитаты взяты из статьи в шапке.

Всего записей: 109 | Зарегистр. 20-01-2005 | Отправлено: 21:50 12-11-2006 | Исправлено: Kolderon, 21:54 12-11-2006
CoolKonig



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kolderon спасибо большое. Вроде понял все, ну почти все

Всего записей: 102 | Зарегистр. 12-10-2005 | Отправлено: 22:10 12-11-2006
Vasya Pupkin



Мракобес
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые, а возможно как-нибудь сделать редирект с сохранением первоначального урла в строке браузера? Видел такие примеры и думаю, что это было сделано с помощью модреврайта.

----------
я не люблю людей

Всего записей: 7062 | Зарегистр. 24-02-2001 | Отправлено: 14:06 14-11-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

Компьютерный форум Ru.Board » Интернет » Web-программирование » mod_rewrite: документация, готовые решения, вопросы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru