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


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

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
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6
Хорошая мысль. Может модераторы пришпилят тему?
 
Пара замечаний немного не в тему.

Цитата:
в тех. задании было указано что проект должен быть оптимизирован под поисковые системы. Поискав немного попал на mod_rewrite.  

Если бы мы заказывали для сайта оптимизацию под поисковые системы и там оказался бы мод_реврайт, разработчика бы пристреллили на месте  
Даже если это и связанные вещи (в чём сомневаемся), то по любому - mod_rewrite это последнее о чём следует думать для оптимизации сайта под поисковые системы.
 

Цитата:
hттp://mybestsite.com/article.php?n=3&page=1  
в такой, более понятный и привычный для обыкновенных пользователей  
Код:hттp://mybestsite.com/articles/3/page1.htm  

Второе красивее, но вот по поводу понятности и привычности согласиться трудно. Кто вообще смотрит в строку адреса? Ну ок, пусть даже кто-то смотрит. Неужели этот "кто-то" запомнит адрес hттp://mybestsite.com/articles/3/page1.htm  и будет его упоминать и набирать наизусть, а адрес http://forum.ru-board.com/topic.cgi?forum=31&topic=8134#1 тот же "кто-то" не будет упоминать из-за некрасивости?
 
P.S.:
http://spectator.ru/technology/php/user_friendly_urls (не совсем в тему, но тоже хорошо)

Всего записей: 1774 | Зарегистр. 25-07-2004 | Отправлено: 16:04 24-06-2005
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ваша ссылка понравилась, довольно интересный материал.

Цитата:
но вот по поводу понятности и привычности согласиться трудно

Кстати это не мои слова Я начитавшись документации, попытаться передать что думают профи в этом деле, почему они считают mod_rewrite полезным. Хотя я думаю они подозревали что пользователю легче сообразить что он может изменить ссылку
http://mybestsite.com/november/article1.htm
на возможно существующую
http://mybestsite.com/january/article1.htm
 

Цитата:
Если бы мы заказывали для сайта оптимизацию под поисковые системы и там оказался бы мод_реврайт, разработчика бы пристрелили на месте

А как вы представляете оптимизацию под поисковики? Единственное что приходит на ум это meta теги, но на них кажется уже ни один поисковик не обращает внимание, кроме google

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 16:39 24-06-2005
edogs

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

Цитата:
Если бы мы заказывали для сайта оптимизацию под поисковые системы и там оказался бы мод_реврайт, разработчика бы пристрелили на месте  
 
А как вы представляете оптимизацию под поисковики?

"Когда-то давным давно, когда интернет был юным и неопытным и по нему ходили юные поисковики...." (с) ... гугл (и прочие) НЕ понимал ссылок вида id.php?a=1 и id.php?a=2, считал их одинаковыми, не ходил по ним и т.д..
Тогда и возникло использование мод_реврайт как способа "оптимизации под поисковики". Сейчас и гугл и яндекс прекрасно понимают такие ссылки. А слухи так и ходят  

Цитата:
 Единственное что приходит на ум это meta теги, но на них кажется уже ни один поисковик не обращает внимание, кроме google  

яндекс обращает, гугл обращает... (про остальные не в курсе просто) ... но ведь это как раз те поисковики которые не следует игнорировать (мягко говоря) оптимизируя сайт под SEO.
Мета-тэги, дескрипшен, титлы, альты, h1, подчеркнутые ключевые слова и прочее - это для поисковиков.
Делать "красивые" ссылки смысл есть, хотя бы потому что это красиво Может и для поисковиков _при прочих равных_ лучше. Но на последнем месте

Всего записей: 1774 | Зарегистр. 25-07-2004 | Отправлено: 17:12 24-06-2005 | Исправлено: edogs, 17:35 24-06-2005
woffer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6
Цитата:
такой адрес не индексируется многими поисковыми системами, удаляется все после знака "?".  

 
не надо таких заявлений - нормально индексируется, посмотри на выдачу )
 
edogs
 

Цитата:
Даже если это и связанные вещи (в чём сомневаемся), то по любому - mod_rewrite это последнее о чём следует думать для оптимизации сайта под поисковые системы.  

 
ну почему же, есть явный (по крайней, мере один) плюс - это постоянные адреса страниц.
 

Цитата:
Неужели этот "кто-то" запомнит адрес hттp://mybestsite.com/articles/3/page1.htm  

 
допустим это неудачный пример, явно удачный -
 
/news/2005/06/06/
/archive/2005/06/06

Всего записей: 935 | Зарегистр. 11-10-2002 | Отправлено: 13:23 25-06-2005 | Исправлено: woffer, 13:28 25-06-2005
SiMM

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

Цитата:
ну почему же, есть явный (по крайней, мере один) плюс - это постоянные адреса страниц.
А без mod_rewrite он какой, непостоянный что-ли?
Цитата:
явно удачный
С точки зрения человека - ему эти закорючки абсолютно по барабану, так же, как и эти
Цитата:
/news.php?date=2005.06.06
/archive.php?date=2005.06.06

Всего записей: 2300 | Зарегистр. 14-05-2004 | Отправлено: 13:48 25-06-2005 | Исправлено: SiMM, 13:49 25-06-2005
woffer

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

Цитата:
А без mod_rewrite он какой, непостоянный что-ли

постоянный. но не константа. до замены скажем, скрипта.
 

Цитата:
С точки зрения человека - ему эти закорючки абсолютно по барабану, так же, как и эти

 
тогда, уж. с точки зрения твоей. с моей - не по барабану.
 
 

Всего записей: 935 | Зарегистр. 11-10-2002 | Отправлено: 14:04 25-06-2005
SiMM

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

Цитата:
постоянный. но не константа
Бред.
Цитата:
с моей - не по барабану.
Никого не интересует ваша точка зрения сама по себе - всех интересует её обоснование. А его пока не было. Т.е. объяснить разницу вы не в состоянии, я правильно понимаю?

Всего записей: 2300 | Зарегистр. 14-05-2004 | Отправлено: 14:55 25-06-2005
woffer

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

Цитата:
Никого не интересует ваша точка зрения сама по себе - всех интересует её обоснование. А его пока не было. Т.е. объяснить разницу вы не в состоянии, я правильно понимаю?

 
Не вижу ссысла объснять привлекательность урла вида /news/2005/06/06/ - это очевидно.
 
да, дальше можете не отвечать.

Всего записей: 935 | Зарегистр. 11-10-2002 | Отправлено: 15:11 25-06-2005 | Исправлено: woffer, 15:12 25-06-2005
SiMM

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

Цитата:
Не вижу ссысла объснять
Потому что с точки зрения человека её нет. Что и требовалось доказать.

Всего записей: 2300 | Зарегистр. 14-05-2004 | Отправлено: 20:26 25-06-2005 | Исправлено: SiMM, 20:50 25-06-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2ALL
Такс.. топик назвали как "документация, готовые решения".. Поэтому по всем остальным вопросам - во флейм.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:59 25-06-2005
DStream

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Может кто тут добавит готовое решение редиректа на некую страничку по огромному списку ip -адресов? И вообще насколько это беспроблемно для apache?
Альтернатива классическая - делать то же самое в скрипте, но интересно...
 
Заодно и топик imho будет пользительным, ежели он выстроится в виде микроFAQ: кто-то просто скопирует себе нужное решение, кто-то прочтет доки и поймет как это решение работает, ког-то это натолкнет на новую идею.
 
 

Всего записей: 603 | Зарегистр. 03-05-2003 | Отправлено: 09:24 26-06-2005
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вижу пошла активная дискуссия в данном топике , это хорошо, так как доказывает что есть о чем поспорить.
1) Я считаю что топик прикреплять не нужно, если мы все топики так будем прикреплять то получится фигня . Почему я создал данный топик, вот зайдите в раздел "Программы" или "Варезник", так очень легко можно найти информацию о программе, любые обсуждения идут в персональной ветке программы, давайте попробуем организовать что-то в этом роде и в этом разделе?
2) По поводу что красивей, есть мудрая пословица "На вкус и цвет, товарища нет", так что вы зря спорите что красивей. Мне например нравится больше  "/news/2005/06/06/", хотя многим программистам понравиться  "/news.php?date=2005.06.06". Добавлю что я часто самостоятельно изменял урл, зная например адрес "/news/2005/06/06/" я мот додуматься что будет существовать и другие каталоги вроде "/news/2005/06/05/", и только после того как я начал изучать PHP я сообразил что такие же изменения можно вносить и в "/news.php?date=2005.06.06". Есть много статей (в шапке например), в которых говориться что урл "/news/2005/06/06/" более понятен.
3) Вы наверно никогда не пользовались таким трюком: с помощью mod_rewrite проверяете не бот ли пришел, если да то отсылаете на страничку welcomebot.htm, оптимизированный под поисковики и на страничку welcomeuser.htm - для пользователей? Если да то все понятно, задумайтесь о такой вещи.
4) На стадии разборки материала стало ясно что кроме данной документации желательно что бы пользователь разбирался и в регулярных выражениях, хотя бы на начальном уровне, по это причине добавляю необходимые линки.
5) Добавил в название топика, "вопросы"
 
 
DStream
Конечно, для этой цели можно воспользоваться конструкцией:
 
Файл .htaccess

Код:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REMOTE_ADDR} ^214.124.23. [OR]
RewriteCond %{REMOTE_ADDR} ^212.23.2. [OR]
RewriteCond %{REMOTE_ADDR} ^85.118.97.
RewriteRule ^.*.htm$ blockip.htm [L]
RewriteRule ^(.*).htm$ $1.htm [L]

В данном примере любой запрос к htm страничкам будет пересылаться на blockip.htm страничку если IP подходит под нашу "маску" (85.118.97. означает диапазон 85.118.97.0 - 85.118.97.255) и отправляем на реальное содержимое в противном случае.
Вот теперь скажите можно ли тоже самое замутить с помощью РНР. Я имею в виде так коротко? Кстати можно сделать что бы IP брали из файла, но для этого у вас должен быть доступ к httpd.conf.

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 13:21 26-06-2005 | Исправлено: Delphi6, 13:57 26-06-2005
SiMM

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

Цитата:
Есть много статей (в шапке например), в которых говориться что урл "/news/2005/06/06/" более понятен.
Говорится, но не объясняется. Собственно, к чему я докопался - просто не нравится, когда люди повторяют как попугаи, что это лучше того, при этом даже не зная причин.
Цитата:
На стадии разборки материала стало ясно что кроме данной документации желательно что бы пользователь разбирался и в регулярных выражениях
Фридл Дж. Регулярные выражения (2-е изд.), Питер 2003, 464 с., ISBN 5-272-00331-4.djvu (плагин к IE для просмотра DjVu-файлов).
Цитата:
Вот теперь скажите можно ли тоже самое замутить с помощью РНР. Я имею в виде так коротко?

Код:
switch (ip2long($_SERVER['REMOTE_ADDR']) & ~0xFF){
  case ip2long('214.124.23.0'):
  case ip2long('212.23.2.0'):
  case ip2long('85.118.97.0'): readfile('blockip.htm'); die;
}
readfile(...);

 
Ещё до кучи (ссылка была подброшена SelenITом, если мне память не изменяет):
http://xpoint.ru/forums/misc/thread/27895.xhtml/

Всего записей: 2300 | Зарегистр. 14-05-2004 | Отправлено: 15:28 26-06-2005 | Исправлено: SiMM, 20:00 26-06-2005
DStream

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

Цитата:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REMOTE_ADDR} ^214.124.23. [OR]
RewriteCond %{REMOTE_ADDR} ^212.23.2. [OR]
RewriteCond %{REMOTE_ADDR} ^85.118.97.
RewriteRule ^.*.htm$ blockip.htm [L]
RewriteRule ^(.*).htm$ $1.htm [L]

 
Это конечно хорошо, но как это будет себя вести, если RewriteCond будет несколько сотен тысяч?  
 
Кстати можно попытаться замутить еще через RewriteMap - но вопрос остается открытым.
 

Цитата:
Вот теперь скажите можно ли тоже самое замутить с помощью РНР. Я имею в виде так коротко?
Не знаю как на php, а на перле это решается просто:
 
print "Status: 302 Moved\nlocation: blocked.html\n\n" if ( check_blocked_ip($client_ip));
 


Всего записей: 603 | Зарегистр. 03-05-2003 | Отправлено: 16:16 26-06-2005
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Давайте перестанем спорить, что красивей, вам нравиться конструкция  /archive.php?date=2005.06.06 пользуйтесь ней, время покажет кто был прав
За линк с книжкой спасибо, добавил в шапку, сам скачал, читаю.

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 20:43 26-06-2005
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Готовый пример который дает возможность пересылать пользователя с адреса с www на обычный без www если ваш хостинг не поддерживает этого автоматически.
www.site.com -> site.com
 

Код:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.
RewriteRule ^(http://www.)(.*)$ http://$2 [L]

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 10:44 27-06-2005
zoza



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

Всего записей: 131 | Зарегистр. 24-01-2004 | Отправлено: 03:37 01-07-2005 | Исправлено: zoza, 03:45 01-07-2005
Delphi6



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

Код:
http://proxy.gesoft.org/surfing/http://google.com/pictures/search.php?url=www.hotmail.com&page=1/index.php?t=3

В нечто такое:

Код:
surfing.php?url="http://google.com/pictures/search.php?url=www.hotmail.com&page=1"&param="t=3"

я пытался воспользоваться следующим кодом

Код:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^(.*)/surfing/(.*)/index.php?(.*)$ $1/surfing.php?url="$2"&param="$3" [L]

 
п.с. Есть ли смысл помешать содержимое переменной url в апострофы, дабы избежать слияние переменных url и param?
 
Вот так работает:

Код:
http://proxy.gesoft.org/surfing/http://google.com/pictures/search.php/index.php?t=3

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 15:01 04-07-2005 | Исправлено: Delphi6, 15:29 04-07-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6, а зачем? И чем тебя не устраивает уже предложенный мной вариант
RewriteRule ^surfing/ /surfing.php [L]
А далее уже разбираешь, что тебе нужно, взяв из $_SERVER['REQUEST_URI'] (правда разбирать там ничего не нужно, ибо достаточно убрать начало).
PS: в рулях то, что идёт за ?, не учавствует, т.е. в нём в твоём случае будет рассмотрен только surfing/http://google.com/pictures/search.php (хотя символ двоеточия мне, честно говоря, не нравится). Да и вот этот кусок p? в твоём правиле будет трактоваться как "не более одного символа p" (т.е. 0 или 1)

Всего записей: 2300 | Зарегистр. 14-05-2004 | Отправлено: 16:12 04-07-2005 | Исправлено: SiMM, 16:14 04-07-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

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

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru