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

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

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

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

Vanya

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Значит так-с. (АПАЧ)
Есть такая конструкция http://domain.ru/?id=1
Надо чтобы была такая http://domain.ru/chapter1 ну или http://domain.ru/1
И ко всему прочему, чтобы это еще и работало. Есть такой механизЬм mod_rewrite и что то типа RwriteEngine on прописывается в .htaccess Но как это настраивается чтобы было как мне надо, я не знаю. Кто сможет чем помочь?
 
 


FAQ по Apache
Apache + mod_rewrite: замена ссылок
Руководство по URL преобразованиям
Модуль Apache mod_rewrite - подробнейшее описание на русском

Всего записей: 8 | Зарегистр. 19-09-2002 | Отправлено: 08:53 30-10-2002 | Исправлено: lynx, 01:01 15-02-2004
rbt



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В .хтаксесе пишешь редирект с ошибки 404 на твой скрипт, который, например при помощи регулярных выражений, выбирает из строки (т.е. из адреса) нужные значения, формирует "правильную ссылку" и отправляет по ней юзера.

Всего записей: 177 | Зарегистр. 26-08-2002 | Отправлено: 12:32 30-10-2002 | Исправлено: rbt, 12:34 30-10-2002
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
rbt
 
Сам понял, что сказал то?
 
Vanya
 
http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteEngine
 
Правило чуть позже. Там верно - надо регулярные выражения юзать.

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 13:04 30-10-2002
rbt



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

Цитата:
Сам понял, что сказал то?  

Понял:
1. пользователь заходит по адресу www.domain.ru/1
 
2. Такой страницы не существует, поэтому веб-сервер пересылает юзверя на стандартную стра ницу с сообщением об ошибке 404
 
3. заменяем эту стандартную страницу об ошибке, на свой скрипт, который анализирут и изменяет адрес, который ввел пользователь и вместо  www.domain.ru/1 посылает юзверя на www.domain.ru/?id=1

Всего записей: 177 | Зарегистр. 26-08-2002 | Отправлено: 13:16 30-10-2002
Vanya

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2rbt:
Да не.. в принципе то правильно сказал, такой вариант тоже существует и пишется это в .htaccess примерно так  
ErrorDocument 404 /all.php, где последний и есть обработчик. А теперь представьте себе сколько редиректов будет у сайта. Т.е. у меня по каждой ссылке редирект будет что ли? А как пои сковая машина будет себя в таком случае вести? Не плюнет ли она на все редиректы?
Для этого как сказал lynx есть механизм подмены mod_rewrite, и превращения в человеческий урл. Тока вот пока что не могу разобраться во всем это и регвыражениях тоже.
 
Добавлено
Если я так сделаю, правильно будет?
 
RewriteRule ^.ru/(.*) /?id=$1  
??

Всего записей: 8 | Зарегистр. 19-09-2002 | Отправлено: 13:24 30-10-2002
H_e_r_m_i_t



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А сильно ли грузят сервер эти  "замены на человеческий УРЛ"?

Всего записей: 950 | Зарегистр. 26-04-2002 | Отправлено: 14:55 20-05-2003
lynx



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

Цитата:
льно ли грузят сервер эти  "замены на человеческий УРЛ"?

 
нет, копейки, не заметно даже.

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 22:08 20-05-2003
H_e_r_m_i_t



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lynx
Благодарю!
 
Еще один вопрос: после таких замен адрес и в адресной строке браузера поменяется на более человеческий или же просто появится возможность вместо mysite.com/index.php?blabla=blabla параллельно использовать и mysite.com/blabla/blabla?  

Всего записей: 950 | Зарегистр. 26-04-2002 | Отправлено: 13:34 21-05-2003
lynx



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

Цитата:
 после таких замен адрес и в адресной строке браузера поменяется на более человеческий  

 
Именно!
 

Цитата:
ли же просто появится возможность вместо mysite.com/index.php?blabla=blabla параллельно использовать и mysite.com/blabla/blabla?    

 
И то и то!
 
Когда набираешь:
mysite.com/index.php?blabla=blabla  будет конвертиться в mysite.com/blabla/blabla?    
 
Так что можно юзать и то и то.

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 19:37 21-05-2003
H_e_r_m_i_t



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Божественно!!!
У меня даже без особых проблем заработало!
Было news/article.php?storyid=2 стало news/article2.html  
 
Только вот когда набираю в адресной строке news/article.php?storyid=2 не ковертится в news/article2.html (или и не должно?)

Всего записей: 950 | Зарегистр. 26-04-2002 | Отправлено: 22:06 07-06-2003
alexhemp



упал с пальмы
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
H_e_r_m_i_t
Можешь написать редирект если хочешь
 
Схема то простая обычно, пишешь в .htaccess
Код:
 
RewriteRule     ^/news/article([0-9]+)\.html$            /news/article.php?storyid=2

Когда клиент спрашивает article2.html mod_rewrite заставляет Apache сделать внутренний перезапрос, но при этом вызывается скрипт с параметром.
 
На сайте все ссылки нужно строить по схеме со статической адресацией.
Переписывать запрос news/article.php?storyid=2 -> news/article2.html  особого смысла нет, т.к. все равно будет обратно переписан.  
Если хочешь можешь сделать редирект для красоты
 
Чтобы не тормозило, нужно написать сотв. RewriteCond
 
У меня сделано например в самом начале: RewriteCond   !^/images и т.п. по всем каталогам которые не надо проверять на совпадение условиям (forum, templates, admin)
 
И перед каждым блоком близких RewriteRule (например news.php в разных вариациях) стоит соотв. RewriteCond
 
 
Добавлено
Vanya
Через 404 тоже можно если юзать не редирект а include и не забывать возвращать код 200, чтобы 404 не возвращался клиенту. Но это точно медленее и сложнее чем хорошо настроенный mod_rewrite. И менее надежно точно. А реги не так уж и сложно писать, нужно просто очень внимательно и медленно читать мануал, не пропуская сложные места

Всего записей: 1945 | Зарегистр. 13-12-2001 | Отправлено: 22:24 07-06-2003
H_e_r_m_i_t



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

Цитата:
На сайте все ссылки нужно строить по схеме со статической адресацией.  
Переписывать запрос news/article.php?storyid=2 -> news/article2.html  особого смысла нет, т.к. все равно будет обратно переписан.  

Ага, я уже догадался, но сперва думал, что news/article.php?storyid=2 -> news/article2.html и news/article2.html >> news/article.php?storyid=2 будут одним RewriteRule'ом создаваться.
 

Цитата:
Чтобы не тормозило, нужно написать сотв. RewriteCond  

Благодарю! Буду потихоньку все пробовать.
Да,  все ж таки может заметно тормозить?
 
P.s. Вот уже второй час под впечатлением mod_rewrite'а: когда что-то офигенно длинное и страшное превращается в симпотичное и коротенькое это "унушает"

Всего записей: 950 | Зарегистр. 26-04-2002 | Отправлено: 23:29 07-06-2003 | Исправлено: H_e_r_m_i_t, 23:30 07-06-2003
H_e_r_m_i_t



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди, объясните темному: если mod_rewrite так хорошо для всех, практически не грузит хостера, то почему его на форумакх не приминяют, чтобы и форумы тоже индексировались?

Всего записей: 950 | Зарегистр. 26-04-2002 | Отправлено: 01:15 19-06-2003
lynx



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

Цитата:
 почему его на форумакх не приминяют, чтобы и форумы тоже индексировались

 
Считается излишеством у хостера. Бывает только на платных хостингах. Там - пожалуйста - .htaccess в твоем распоряжении.

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 04:18 19-06-2003
tolsty1



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

Цитата:

Цитата:
 после таких замен адрес и в адресной строке браузера поменяется на более человеческий  
 
Именно!  

Хрена!
 
Это внутрення подстановка Апача. Если только не указан флаг [R]...

Всего записей: 158 | Зарегистр. 26-02-2003 | Отправлено: 14:32 20-06-2003
Sergeant

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

Цитата:
У меня сделано например в самом начале: RewriteCond   !^/images и т.п. по всем каталогам которые не надо проверять на совпадение условиям (forum, templates, admin)  

Можно подробнее про это место узнать? У меня сейчас как раз перезаписываются урлы к тем каталогам, которые трогать не надо (тот же images), но подобное условие (как в цитате) не проходит (должен быть еще один аргумент).
 
Т.е. что-то в этом роде:

Цитата:
RewriteCond ... !^/images

А что вместо точек поставить-то? Ума не приложу..

Всего записей: 1553 | Зарегистр. 06-08-2001 | Отправлено: 14:58 24-06-2003
alexhemp



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

Цитата:
почему его на форумакх не приминяют, чтобы и форумы тоже индексировались?  

Я переписал phpBB2.0.5 + mod_rewrite - весь форум теперь выглядит как статика
Ну разве что в поиске и в админке осталось.
 
 
Sergeant
Ну например можно сделать так:
 
RewriteCond  %{REQUEST_URI}   !^forum.*                [NC]
RewriteCond  %{REQUEST_URI}   !^images.*                 [NC]
RewriteCond  %{REQUEST_URI}   !^admin.*                  [NC]
 
А потом уже Все RewriteRule
 
Логика проста, я не хочу чтобы при получении URL начинающихся с forum, images и admin mod_rewrite пытался найти соотв. им RewriteRule - т.к. его точно нет.
Это стоит в самом начале и дает приличное ускорение кстати.
Флаг NC - no case
 
Еще рекомендую везде применять влаги L и NS - если нужно просто трансформировать один запрос в другой. Т.к. в противном случае - переписанный URL будет еще раз пропущен через всю цепочку RewriteRule-ов
 
Еще можно использовать RewriteCond для выделения блоков, т.е. например
 

Код:
RewriteCond  %{REQUEST_URI}   ^articles.*                [NC]
RewriteRule  articles([0-9]+).*   articles.php?id=$1          [L, NS, NC]
RewriteRule  articles([0-9]+)/page([0-9]+).*  articles.php?id=$1&page=$2          [L, NS, NC]
 
RewriteCond  %{REQUEST_URI}   ^news.*                [NC]
RewriteRule  news([0-9]+).*   news.php?id=$1          [L, NS, NC]
RewriteRule  news([0-9]+)/page([0-9]+).*  news.php?id=$1&page=$2          [L, NS, NC]

 
При больших объемах списка - это может быть значительно быстрее, т.к. будут проверяться на совпадения RewriteCond - и если не совпадает - управление передасться на след. RewriteCond и не будут искаться совпадения в блоке RewriteRule за ним, что естественно ускорит обработку.
 
Добавлено
Sergeant
Постучи мне в асю - все в деталях объясню, что знаю

Всего записей: 1945 | Зарегистр. 13-12-2001 | Отправлено: 15:27 24-06-2003
Sergeant

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexhemp,
Не, мне надо чтоб в документе не переписывались ссылки. REQUEST_URI - это запрашиваемый файл только, а в документе всё меняется к чертям и получается бред... вот как с этим бороться?

Всего записей: 1553 | Зарегистр. 06-08-2001 | Отправлено: 16:11 24-06-2003
Kaa_g



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Плиз выложите минимальный пример что-бы проверить работает у меня mod_rewrite или нет (можно без регекспов). А дальше сам уже разберусь

Всего записей: 63 | Зарегистр. 29-04-2003 | Отправлено: 12:05 01-08-2003
alexhemp



упал с пальмы
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sergeant
Еще раз и медленно!
 
скрипты принимают параметры
 
был запрос серверу скажем article5.html - mod_rewrite его переписал в articles.php?id=5
И это призошло _внутри_ апача, клиент ничего про это не знает
 
Далее скрипт выдал HTML - какие ссылки он выдает - это твое дело
 
Если хочется псевдо-статику, то скрипты нужно переписывать и всю выдачу вида
<a href="articles.php?id=$id"> переделывать на <a href="article$id.html">
 
mod_rewrite автоматом не будет тексты скриптов править, он лишь поможет разобрать запрос и вызвать скрипт с параметрами.

Всего записей: 1945 | Зарегистр. 13-12-2001 | Отправлено: 13:15 01-08-2003
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Apache+mod_rewrite


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru