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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Оказывается что я не правильно понял как работает mod_rewrite! Теперь ясно, так приятно
Теперь мне нужна документация по директивам [L], [R] и т.д. А также по константам {REQUEST_URI}, {QUERY_STRING} и т.д. Что каждый из них означает и когда используется.
Всем спасибо, временно можно считать вопрос решенным, особенно хочу поблагодарить SiMM за помощь и терпение

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

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

Цитата:
Теперь мне нужна документация по директивам [L], [R] и т.д. А также по константам {REQUEST_URI}, {QUERY_STRING} и т.д.
Вообще у Егорова это вроде всё есть, но до кучи можешь попробовать глянуть сюда

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 18:36 04-07-2005
Dex_Pustota



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Такой вопрос: понятно как сделать из news.php?id=12 в news/12/, но как можно сделать чтобы только переменная после адреса передавалась, т.е. www.site.ru/?news в www.site.ru/news/
 
Как я понял надо с %{QUERY_STRING} делать, но не получается...

Всего записей: 728 | Зарегистр. 03-10-2001 | Отправлено: 11:12 05-07-2005
Delphi6



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

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

Вот это уже намного интересней, надо бы добавить в шапку! Спасибо SiMM

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 11:22 05-07-2005
DzOOMer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите, возможно ли использование в 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)!

Всего записей: 882 | Зарегистр. 16-11-2004 | Отправлено: 22:43 13-07-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DzOOMer
Посмотри error_log
да и потом.. русские буквы должны быть URL encoded..


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:47 13-07-2005
Delphi6



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

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

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

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 23:07 13-07-2005
DzOOMer

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

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

 
тогда как такую ссылку превратить в index.php?f=Ф ?

Всего записей: 882 | Зарегистр. 16-11-2004 | Отправлено: 23:54 13-07-2005
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DzOOMer
А ты попытайся набрать в адресной строке index.php?f=Ф и увидишь что она преобразуется в index.php?f=%D4 и ты в скрипте получишь переменную, просто тебе перед использованием переменной нужно будет воспользоваться функцией urldecode()
Желаю удачи

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 00:01 14-07-2005
DzOOMer

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

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

 
нету там ошибок, связанных с этим.
последняя ошибка была два дня назат:
 
[12-Jul-2005 14:46:55] PHP Warning:  Division by zero in /home/www/core/send.php on line 33

Всего записей: 882 | Зарегистр. 16-11-2004 | Отправлено: 00:01 14-07-2005
Cheery



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

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

ну не может этого быть.. все 500 ошибки туда логируются.. ты не смотри логи ошибок php, смотри логи ошибок сервера.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:03 14-07-2005
DzOOMer

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

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

 
urldecode() это для php.
 
если я наберу в браузере index-f-%D4.htm то кто мне преобразует его в  index.php?f=%D4
я говорю про файл .htaccess
 
что писать для этого случая вместо
 
RewriteRule ^index-([a-z]+)-([a-zA-Z_-]*)\.htm$ $index.php?$1=$2  [L]  
 
?
 
Добавлено:
ошибка 500 появляется только после того, как я добваляю в файле htaccess  маску с русскими символами.
если в браузере вписать www.mysite.ru/index.php?f=Ф то все срабатывает нормально, и нет никаких ошибок.
мне надо, чтобы при наборе хоть www.mysite.ru/index-f-%D4.htm хоть www.mysite.ru/index-f-Ф.htm mod_rewrite превращал это в index.php?f=Ф или в index.php?f=%D4
 
в php я уже разберусь с юникодом и сделаю как надо.
 
вся проблема в том как сделать фильтр на русские буквы (или их юникод формат)

Всего записей: 882 | Зарегистр. 16-11-2004 | Отправлено: 00:04 14-07-2005
DzOOMer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
новая задачка:
 
есть адрес вида site.ru (локальный путь /domain/publik_html)
есть поддомен вида admin.site.ru (локальный путь /domain/publik_html/admin)
 
необходимо сделать так, чтобы обращение по адресу admin.site.ru было равносильно обращению к site.ru тоесть сервер брал скрипт не из /domain/publik_html/admin а из /domain/publik_html
 
пробовал так:
(файл .htaccess в /domain/publik_html)
RewriteEngine on
RewriteRule ^admin/(.*) /$1 [L]
 
но не выходит.
 
как еще это можно реализовать?
 
ps простой редирект не поможет т.к. скрипту нужно видеть именно admin.site.ru в DNS name.

Всего записей: 882 | Зарегистр. 16-11-2004 | Отправлено: 10:28 15-08-2005
6epcepk



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

Код:
 
RewriteEngine on
RewriteBase /
 
RewriteRule ^newsarchives$ /index?act=newsarchives
 

 
Ссылку делаю вида a href="newsarchives".
Но когда нажимаю, то страница открывается в "номом окне" (у меня должна открываться в центральном блоке .. if ($act == newsarchives include ...) .
 
Но если я делаю ссылку вида a href="newsarchives.html" и правило RewriteRule ^newsarchives.html$ /index?act=newsarchives, то страница открывается правильно.
 
Где-то я что-то недопонимаю. Благодарю за объяснения.

----------
comming soon..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 19:38 20-08-2005
Mxmv



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня задача похожа на вопрос DzOOMer'a:
есть папка http://domen.site.ru/folder/
необходимо ее вызывать при обращении к http://folder.site.ru
 
Я пробовал в folder.site.ru в .htaccess прописать  

Код:
RewriteRule /(.*)  http://domen.site.ru/folder/$1

но несработало.
 
Подскажите пожалуйста, как правильно сделать.

Всего записей: 40 | Зарегистр. 10-11-2004 | Отправлено: 09:03 28-10-2005 | Исправлено: Mxmv, 09:09 28-10-2005
dacuan

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

Цитата:
У меня задача похожа на вопрос DzOOMer'a:  
есть папка http://domen.site.ru/folder/  
необходимо ее вызывать при обращении к http://folder.site.ru  
 
Я пробовал в folder.site.ru в .htaccess прописать  
 
Код:
RewriteRule /(.*)  http://domen.site.ru/folder/$1     
 
но несработало.  
 
Подскажите пожалуйста, как правильно сделать.

В корне сайта в .htaccess добавь
RewriteCond %{HTTP_HOST} ^folder.site.ru$
RewriteRule (.*)   folder/$1 [L]
 
folder.site.ru должен быть алиасом для domen.site.ru

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 13:47 28-10-2005
MAX_DAMAGE



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ПОчему не работает такая конструкция?
 
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^directory.site.com$
RewriteRule (.*)   directory/$1 [L]  
RewriteRule ^directory[/]?$ index.php?groupurl=directory [QSA]
 
 
Тоесть при обращении к directory.site.com должен выполняться site.com/index.php?groupurl=directory Однако сервер возвращает "500 Internal Server Error"

Всего записей: 258 | Зарегистр. 10-04-2002 | Отправлено: 13:36 04-03-2006
dacuan

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

Код:
 
RewriteEngine on  
Options +FollowSymlinks  
 
RewriteCond %{HTTP_HOST} ^directory.site.com$  
RewriteRule .* index.php?groupurl=directory [QSA]
 

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 14:02 04-03-2006
MAX_DAMAGE



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

Всего записей: 258 | Зарегистр. 10-04-2002 | Отправлено: 14:06 04-03-2006
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MAX_DAMAGE
 
1) Что пишет?
 
2) Если убрать строку
RewriteCond %{HTTP_HOST} ^directory.site.com$  
Переадресация работает?
 
3) directory.site.com прописан как ServerAlias?

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 14:14 04-03-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