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

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



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

Код:
 
RewriteEngine on  
RewriteCond %{QUERY_STRING} ^(.*)$  
RewriteRule ^(.*)$ http://site.ru/$1.php?r=%1 [R=301]
 


----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 17:20 23-10-2012
DJ_Scorp



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

Цитата:
Что-то вроде
 
Код:
 
RewriteEngine on  
RewriteCond %{QUERY_STRING} ^(.*)$  
RewriteRule ^(.*)$ http://site.ru/$1.php?r=%1 [R=301]  

 
Спасибо за ответ, но увы не срабатывает! К тому же редирект мне не нужен.
Кроме того в примере выше переходит на адрес http://site.ru/.php?r=one, а это неправильно, так как в случаи если не указана страница, то должно быть так в итоге http://site.ru/?r=one
 
Жду ещё помощи.

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 00:31 24-10-2012
Cheery



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

Цитата:
так как в случаи если не указана страница

ну так этот случай нужно отдельно оговаривать
 
   
RewriteEngine on    
RewriteCond %{QUERY_STRING} ^(.+)$    
RewriteRule ^(.+)$ http://site.ru/$1.php?r=%1 [L]  
 
RewriteCond %{QUERY_STRING} ^(.+)$    
RewriteRule ^$ http://site.ru/?r=%1 [L]  
 
что нить такое )  

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:16 24-10-2012
DJ_Scorp



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

Цитата:
RewriteEngine on    
RewriteCond %{QUERY_STRING} ^(.+)$    
RewriteRule ^(.+)$ http://site.ru/$1.php?r=%1 [L]  
 
RewriteCond %{QUERY_STRING} ^(.+)$    
RewriteRule ^$ http://site.ru/?r=%1 [L]  

 
 
Такой вариант тоже не срабатывает.

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 01:32 24-10-2012
Cheery



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

Цитата:
Такой вариант тоже не срабатывает.

а вы его куда прописываете ?)  
в конфиг или в htaccess?


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:36 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В HTML )))
 
Конечно в .htaccess

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 01:41 24-10-2012
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DJ_Scorp
ну так описали бы в чем дело )) там условие нужно, чтобы бесконечного цикла не было.
например так

Код:
RewriteEngine on      
RewriteCond %{QUERY_STRING} ^(.+)$  
RewriteCond %{QUERY_STRING} !^r=      
RewriteRule ^(.+)$ http://site/$1.php?r=%1 [L]    
   
RewriteCond %{QUERY_STRING} ^(.+)$  
RewriteCond %{QUERY_STRING} !^r=      
RewriteRule ^$ http://site/?r=%1 [L]  

 
что то такое, потом проверю

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:52 24-10-2012 | Исправлено: Cheery, 02:10 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Не работает! Описываю ещё:
 
 
Когда человек заходит по адресу такого вида http://site.ru/prez?one
он должен попадать на адрес такого вида: http://site.ru/prez.php?r=one
 
Если он заходит на адрес http://site.ru/?one то соответственно должен попадать на http://site.ru/?one или http://site.ru/index.php?one
 
Если он заходит на адрес http://site.ru/prez или http://site.ru/prez/ (то есть без параметров) то соответственно должен попадать на http://site.ru/prez.php
 
При всём этом конечно тот адрес который он ввёл в адресную строку должен там таким и оставаться, то есть никаких редиректов, обычная подмена ссылок для удобства запоминания и написания.

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 02:12 24-10-2012
Cheery



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

Цитата:
Не работает!

что именно не работает? опишите что происходит не так
вот это работает у меня как и написали

Код:
RewriteEngine on      
RewriteCond %{QUERY_STRING} ^(.+)$  
RewriteCond %{QUERY_STRING} !^r=      
RewriteRule ^(.+)$ /$1.php?r=%1 [L]    
   
RewriteCond %{QUERY_STRING} ^(.+)$  
RewriteCond %{QUERY_STRING} !^r=      
RewriteRule ^$ /index.php?r=%1 [L]  

 

Цитата:
Если он заходит на адрес http://site.ru/prez или http://site.ru/prez/ (то есть без параметров) то соответственно должен попадать на http://site.ru/prez.php  

потом допишу

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:16 24-10-2012 | Исправлено: Cheery, 02:20 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Параметр не передаётся
 
В адресе запроса указывается сразу значение параметра, а уже в том адресе на который направляет там это значение присваивается самому параметру и передаётся в скрипт методом GET

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 02:21 24-10-2012 | Исправлено: DJ_Scorp, 02:24 24-10-2012
Cheery



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

Цитата:
Параметр не передаётся

проверял - все передается.
http://127.0.0.1/test?000
дает

Цитата:
_SERVER["QUERY_STRING"]    r=000
_SERVER["SCRIPT_NAME"]    /test.php
_REQUEST["r"]    000
_GET["r"]    000


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:24 24-10-2012 | Исправлено: Cheery, 02:26 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Странно, что же может быть.. хм... в скрипте принимаю как обычно через $_GET['r']

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 02:26 24-10-2012
Cheery



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

Цитата:
в скрипте принимаю как обычно через $_GET['r']

смотрите выше.. процитировал результат из phpinfo

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:26 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да, точно работает, сделал как Вы, но смотрите какая штука, даже не знаю почему так...  
 
создал на локалке под денвером как обычно папку с адресом сайта в ней папку www и там создал вот файл test.php с содержимым <?php echo $_GET['r']; ?>, вставил правило в .htaccess которое Вы дали последнее в итоге при переходе по адресу вида http://site.ru/test?000 почему-то ошибка 404
 
перекинул это всё в папку локалхост, там всё работает как положено...  
 
Странно, в чём причина, всё остальное ведь работает из папки сайта, а это правило не хочет...

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 02:49 24-10-2012
Cheery



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

Цитата:
почему-то ошибка 404

потому что переадресация, если посмотрите, начинается от корня сайта, то есть с /

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:51 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ну и ладно, правильно же, оно и должно всё срабатывать, я же открываю адрес как бы он в интернете... что-то всё равно не пойму... Я ещё очень слабо разбираюсь во всех этих тонкостях, но с такой ситуацией сталкиваюсь впервые... обычно у меня всё работает на локалке без проблем...
 
Добавлено:
Так, стоп... это я дурачок умудрился адрес перепутать самого сайта... Извините меня, пожалуйста.
 
Всё работает! Остался только один момент ещё...
 
Когда человек заходит по адресу такого вида http://site.ru/prez?one
он должен попадать на адрес такого вида: http://site.ru/komp.php?r=one
 
То есть параметр указывающий на страницу и сама страница могут отличаться, то есть якобы в адресе запроса сокращённо, а указывает на полное название страницы...

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 02:57 24-10-2012
Cheery



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

Цитата:
То есть параметр указывающий на страницу и сама страница могут отличаться, то есть якобы в адресе запроса сокращённо, а указывает на полное название страницы...

либо перечисляете все способы в htaccess, создавая отдельные правила
либо перекидываете на php файл, который определяет что вам нужно и перебрасывает туда или делает внутренний запрос
 
в принципе в mod_rewrite есть маппинг, но никогда им не пользовался
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritemap

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:06 24-10-2012 | Исправлено: Cheery, 03:07 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Прописал отдельные правила для каждой странички по типу  
 
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteCond %{QUERY_STRING} !^r=
RewriteRule ^t?$ test.php?r=%1 [L]
 
 
результат нужны даёт, но вот если без параметров, то ошибка.
То есть если так http://site.ru/t то ошибка
 
Подскажите, пожалуйста.

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 03:24 24-10-2012
Cheery



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

Цитата:
То есть если так http://site.ru/t то ошибка

а файл t.php при этом физически существует?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:26 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нет конечно, оно должно перенаправлять на файл test.php

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 03:32 24-10-2012
Открыть новую тему     Написать ответ в эту тему

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