Ru-Board.club
← Вернуться в раздел «Web-программирование»

» mod_rewrite: документация, готовые решения, вопросы

Автор: Delphi6
Дата сообщения: 24.06.2005 14:26
mod_rewrite

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


Если вы пишите форумы, сайт с новостями или любой сайт в котором есть конструкция 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
Автор: edogs
Дата сообщения: 24.06.2005 15:04
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 (не совсем в тему, но тоже хорошо)
Автор: Delphi6
Дата сообщения: 24.06.2005 15:39
Ваша ссылка понравилась, довольно интересный материал.

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

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


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

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

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

А как вы представляете оптимизацию под поисковики?

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

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

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


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

edogs


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


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


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


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

/news/2005/06/06/
/archive/2005/06/06
Автор: SiMM
Дата сообщения: 25.06.2005 12:48

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

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

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


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


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


Автор: SiMM
Дата сообщения: 25.06.2005 13:55

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

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


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

да, дальше можете не отвечать.
Автор: SiMM
Дата сообщения: 25.06.2005 19:26

Цитата:
Не вижу ссысла объснять
Потому что с точки зрения человека её нет. Что и требовалось доказать.
Автор: Cheery
Дата сообщения: 25.06.2005 19:59
2ALL
Такс.. топик назвали как "документация, готовые решения".. Поэтому по всем остальным вопросам - во флейм.
Автор: DStream
Дата сообщения: 26.06.2005 08:24
Может кто тут добавит готовое решение редиректа на некую страничку по огромному списку ip -адресов? И вообще насколько это беспроблемно для apache?
Альтернатива классическая - делать то же самое в скрипте, но интересно...

Заодно и топик imho будет пользительным, ежели он выстроится в виде микроFAQ: кто-то просто скопирует себе нужное решение, кто-то прочтет доки и поймет как это решение работает, ког-то это натолкнет на новую идею.


Автор: Delphi6
Дата сообщения: 26.06.2005 12:21
Вижу пошла активная дискуссия в данном топике , это хорошо, так как доказывает что есть о чем поспорить.
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]
Автор: SiMM
Дата сообщения: 26.06.2005 14:28

Цитата:
Есть много статей (в шапке например), в которых говориться что урл "/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(...);
Автор: DStream
Дата сообщения: 26.06.2005 15:16
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));


Автор: Delphi6
Дата сообщения: 26.06.2005 19:43
Давайте перестанем спорить, что красивей, вам нравиться конструкция /archive.php?date=2005.06.06 пользуйтесь ней, время покажет кто был прав
За линк с книжкой спасибо, добавил в шапку, сам скачал, читаю.
Автор: Delphi6
Дата сообщения: 27.06.2005 09:44
Готовый пример который дает возможность пересылать пользователя с адреса с www на обычный без www если ваш хостинг не поддерживает этого автоматически.
www.site.com -> site.com


Код: RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.
RewriteRule ^(http://www.)(.*)$ http://$2 [L]
Автор: zoza
Дата сообщения: 01.07.2005 02:37
сорри..
ошибся адресом...
тут
Автор: Delphi6
Дата сообщения: 04.07.2005 14:01
Ребята как можно превратить урл:

Код: http://proxy.gesoft.org/surfing/http://google.com/pictures/search.php?url=www.hotmail.com&page=1/index.php?t=3
Автор: SiMM
Дата сообщения: 04.07.2005 15:12
Delphi6, а зачем? И чем тебя не устраивает уже предложенный мной вариант
RewriteRule ^surfing/ /surfing.php [L]
А далее уже разбираешь, что тебе нужно, взяв из $_SERVER['REQUEST_URI'] (правда разбирать там ничего не нужно, ибо достаточно убрать начало).
PS: в рулях то, что идёт за ?, не учавствует, т.е. в нём в твоём случае будет рассмотрен только surfing/http://google.com/pictures/search.php (хотя символ двоеточия мне, честно говоря, не нравится). Да и вот этот кусок p? в твоём правиле будет трактоваться как "не более одного символа p" (т.е. 0 или 1)
Автор: Delphi6
Дата сообщения: 04.07.2005 15:39
Оказывается что я не правильно понял как работает mod_rewrite! Теперь ясно, так приятно
Теперь мне нужна документация по директивам [L], [R] и т.д. А также по константам {REQUEST_URI}, {QUERY_STRING} и т.д. Что каждый из них означает и когда используется.
Всем спасибо, временно можно считать вопрос решенным, особенно хочу поблагодарить SiMM за помощь и терпение
Автор: SiMM
Дата сообщения: 04.07.2005 17:36

Цитата:
Теперь мне нужна документация по директивам [L], [R] и т.д. А также по константам {REQUEST_URI}, {QUERY_STRING} и т.д.
Вообще у Егорова это вроде всё есть, но до кучи можешь попробовать глянуть сюда
Автор: Dex_Pustota
Дата сообщения: 05.07.2005 10:12
Такой вопрос: понятно как сделать из news.php?id=12 в news/12/, но как можно сделать чтобы только переменная после адреса передавалась, т.е. www.site.ru/?news в www.site.ru/news/

Как я понял надо с %{QUERY_STRING} делать, но не получается...
Автор: Delphi6
Дата сообщения: 05.07.2005 10:22

Цитата:
Вообще у Егорова это вроде всё есть, но до кучи можешь попробовать глянуть сюда

Вот это уже намного интересней, надо бы добавить в шапку! Спасибо SiMM
Автор: DzOOMer
Дата сообщения: 13.07.2005 21:43
подскажите, возможно ли использование в mod_rewrite русских символов?
например сылки вида
index.php?f=W
и
index.php?f=Ф
вызывают нужные страницы и все замечательно работает, но переписанные в mod_rewrite вторая ссылка вызывает ошибку 500:
index-f-W.htm
index-f-Ф.htm

правило стоит такое:

RewriteRule ^index-([a-z]+)-([a-zA-Z_-]*)\.htm$ $index.php?$1=$2 [L]

если пишу

RewriteRule ^index-([a-z]+)-([a-zA-ZА-Я_-]*)\.htm$ $index.php?$1=$2 [L]

то вызывает ошибку 500 (internal server error)!
Автор: Cheery
Дата сообщения: 13.07.2005 21:47
DzOOMer
Посмотри error_log
да и потом.. русские буквы должны быть URL encoded..
Автор: Delphi6
Дата сообщения: 13.07.2005 22:07
DzOOMer

Цитата:
да и потом.. русские буквы должны быть URL encoded..

Другими словами вместо:
index-f-ф.htm
вы должны иметь:
index-f-%D4.htm
Автор: DzOOMer
Дата сообщения: 13.07.2005 22:54

Цитата:
Другими словами вместо:
index-f-ф.htm
вы должны иметь:
index-f-%D4.htm


тогда как такую ссылку превратить в index.php?f=Ф ?
Автор: Delphi6
Дата сообщения: 13.07.2005 23:01
DzOOMer
А ты попытайся набрать в адресной строке index.php?f=Ф и увидишь что она преобразуется в index.php?f=%D4 и ты в скрипте получишь переменную, просто тебе перед использованием переменной нужно будет воспользоваться функцией urldecode()
Желаю удачи
Автор: DzOOMer
Дата сообщения: 13.07.2005 23:01

Цитата:
Посмотри error_log


нету там ошибок, связанных с этим.
последняя ошибка была два дня назат:

[12-Jul-2005 14:46:55] PHP Warning: Division by zero in /home/www/core/send.php on line 33

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.