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

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



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kenny_sk8
в скрипте анализируешь $_SERVER['QUERY_STRING']
и вытаскиваешь нужные тебе значения

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:08 07-03-2007
kenny_sk8



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А в конец с помощью регвыра эту фигню поставить вообще никак? да?

Всего записей: 15 | Зарегистр. 14-09-2004 | Отправлено: 22:59 09-03-2007
Cheery



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

Цитата:
А в конец с помощью регвыра эту фигню поставить вообще никак? да?

вот именно, что добавляешь в конец.. или вообще просто сразу после ?  
и потом скриптом смотришь, что ему передали

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:33 09-03-2007
user472

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте.
У меня такой вопрос:
Как заставить mod_rewrite применять правило для всех вхождений подстроки в строку а не только для одного.
Например:
RewriteRule  ^(.*)test(.*)$  /$1TEST$2
Если запрос имеет вид lalalatestlalatest, то преобразование test в TEST выполнится всего один раз. В итоге получится строка lalalatestlalaTEST, вопрос, как сделать так, чтобы получилась lalalaTESTlalaTEST, без дублирования правила, т.к. вхождений искомой подстроки в строку может быть сколько угодно.
Спасибо.
И второй вопрос: где можно прочитать полное описание всех флагов mod_rewrite.

Всего записей: 44 | Зарегистр. 20-08-2005 | Отправлено: 15:45 10-03-2007
Cheery



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

Цитата:
И второй вопрос: где можно прочитать полное описание всех флагов mod_rewrite.

а ссылки в шапке уже не устраивают?

Цитата:
В итоге получится строка lalalatestlalaTEST, вопрос, как сделать так, чтобы получилась lalalaTESTlalaTEST, без дублирования правила, т.к. вхождений искомой подстроки в строку может быть сколько угодно

к чему такой изврат?
пока ед на ум приходит.. сделать замену и послать снова на правила.. и так в цикле, пока не будет все заменено.


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:34 10-03-2007
unnamednetua

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди добрые помогите пожалуйста с написанием правил для такого замены адреса.
 
http://server/?go=dwnlds
http://server/download/
 
http://server/?go=dwnlds&gr=1
http://server/download/program/
 
http://server?go=dwnlds&gr=1&sgr=1
http://server/download/program/internet
 
http://server/?go=viewfile&id=142
http://server/viewfile/142
 
http://server/getfile.php?id=142
http://server/getfile/142
 
Спасибо.

Всего записей: 64 | Зарегистр. 02-05-2006 | Отправлено: 13:01 14-03-2007 | Исправлено: Cheery, 18:28 14-03-2007
DMx



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хочу, чтоб мой скрипт перехватывал управление только, если в ссылке НЕТ определенных слов: "_pre", "_mini" и "avatars". А так же, чтоб расширение файлов было только GIF, JPG или PNG.
 
Добился пока только для первых двух ("pre" и "mini"):
 

Код:
<FilesMatch "[^mini|pre]\.(gif|jpg|png)$">
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ /files/my_script.php [L,QSA]
</FilesMatch>

 
Дело в том, что "mini" и "pre" могут встречаться только в имени файла, а "avatars" только в имени директории. На этом я и застрял... никак не могу добавить сюда DirectoryMatch - не работает в любых вариантах...
 
Помогите, плиз.

Всего записей: 154 | Зарегистр. 23-09-2003 | Отправлено: 20:32 16-03-2007
Fader



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нужно решить следующую задачу:  
 
При обращении к web-серверу из локальной сети (192.168.34.0/24): http://192.168.34.200/index.html (он же http://server/index.html) нужно чтобы апач редиректил на адрес http://192.168.34.200/site/index.html (он же http://server/site/index.html)
 
А при обращении с сервера к: http://127.0.0.1 (он же http://localhost) редирект не происходил.  
 
Что написать в .htaccess ?

----------
Ваш персональный приватный VPN

Всего записей: 898 | Зарегистр. 03-01-2004 | Отправлено: 12:41 18-03-2007
Sozon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
 
Помогите пожалуйста советом.
 
Хочу, чтобы адреса  
http://site.ru/script/1 и http://site.ru/script/1/
 
заменялись на http://site.ru/script.php?p=1
 
Если использовать такую конструкцию
 
RewriteRule ^.*script/(.*)$ script.php?p=$1
 
то при использовании http://site.ru/script/1/ в скрипт передается 1/  вместо 1
 
А если юзать
RewriteRule ^.*script/(.*)/$ script.php?p=$1  
 
то для http://site.ru/script/1 правило вообще не сработает.

Всего записей: 7 | Зарегистр. 05-03-2006 | Отправлено: 21:14 22-03-2007
Cheery



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

Цитата:
в скрипт передается 1/  вместо 1  

и что? сложно выделить в нем?
RewriteRule ^.*script/(.*)/?$ script.php?p=$1  
или
RewriteRule ^.*script/(.*)/+$ script.php?p=$1  
не проверял какой сработает

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:17 22-03-2007 | Исправлено: Cheery, 21:18 22-03-2007
Sozon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо.
 
Еще одна проблема.
 
Например мы заменяем  
 
 script.php?p1=2&p2=4
 
на  
 
 script/2/4.html
 
При этом на одном уровне со скриптом script.php лежит папка с картинками (pict). И пути к картинкам прописаны, как pict/p1.jpg
 
Если мы заменяем URL на script/2/4.html, то картинки уже не грузятся, т.к. получается, что мы находимся как бы в каталоге 2 и скорее всего картинки он пытается брать оттуда.
 
Если например заменять на script2-4.html, т.е. как бы не добавлять новые каталоги в URL, то все ok.
 
Можно ли как то решить эту проблему с директориями?
 

Всего записей: 7 | Зарегистр. 05-03-2006 | Отправлено: 10:02 23-03-2007
Cheery



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

Цитата:
Можно ли как то решить эту проблему с директориями?  

читать, к примеру, про таг base
либо писать пути от корня сайта
либо в том же rewrite проверять расширение файла

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 15:43 23-03-2007 | Исправлено: Cheery, 15:43 23-03-2007
Mira



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
люди, перерыл много чего, не могу найти как работать с датами
нужно при получении урла, сравнить его стекущей датой...
 
буду благодарен за любую помошь
 
навеяно (http://forum.ru-board.com/topic.cgi?forum=31&topic=11023&start=20#20)

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 19:58 13-04-2007
Cheery



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

Цитата:
нужно при получении урла, сравнить его стекущей датой...

сравнить что???

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:02 13-04-2007
Mira



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
сравнить число, полученное из урла, с текущей датой... и в зависимости от решения сделать соответсвующие дейсвия.

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 22:19 13-04-2007
Cheery



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

Цитата:
сравнить число, полученное из урла, с текущей датой... и в зависимости от решения сделать соответсвующие дейсвия.

давай не словами, а примерами, а?? и дату можно по разному записать..
 
но проще перекидывать скрипту и в нем смотреть

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:21 13-04-2007 | Исправлено: Cheery, 22:25 13-04-2007
Mira



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://forum.ru-board.com/topic.cgi?forum=31&topic=11023&start=20#20 здесь изложено почему не проще делать через скрипт.
 
 
например урл такого виде http://site.ru/070317/img123.gif
 
правило
 
RewriteRule ^([0-9]{6})/img([0-9]+).gif?$ /.....
 
вот надо сравнить это в htaccess и в соответсвии с резульатом заргузить либо
 
imgempty.gif
или на скрипт
 
getimg.php?id=$2
 
 
Все.
 
Спасибо.

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 23:22 13-04-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mira
ну.. выцепляем дату из url и далее сравниваем с переменными окружения..
итого.. первый RewriteCond для вытаскивания даты
второй RewriteCond для сравнения ее с нынешней  %{переменная}:  
TIME_YEAR
TIME_MON
TIME_DAY
и далее RewriteRule для перехода по новой url

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:27 13-04-2007 | Исправлено: Cheery, 23:28 13-04-2007
Mira



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Спасибо, а можно немножко подробней и с примерами.
 
 
Добавлено:
простите. не проштудировал вопрос а уже о несностях написал...
пока отбой.
 
Добавлено:

Цитата:
 
Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения <STRING, >STRING и =STRING мы можем производить редиректы зависящие от времени:
 
RewriteEngine on
RewriteCond   %{TIME_HOUR}%{TIME_MIN} >0700
RewriteCond   %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule   ^foo\.html$             foo.day.html
RewriteRule   ^foo\.html$             foo.night.html
 
Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html. Просто класная вещь для какой-либо странички…
 
 

 
может кому-то поможет

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 01:38 14-04-2007
Sozon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
У меня вопрос по mod_rewrite
 
хочу чтобы  
вместо http://мой_сайт/articles/     открывалось   http://мой_сайт/articles.php
 
вместо http://мой_сайт/articles/2/     открывалось   http://мой_сайт/articles.php?r=2
 
вместо http://мой_сайт/articles/2/3.htm     открывалось   http://мой_сайт/articles.php?r=2&s=3
 
Все это у меня получилось. Приведу код, может куму - нибудь поможет:
RewriteRule ^.*articles/([0-9]*)/([0-9]*)\.htm articles.php?s=$2&r=$1
RewriteRule ^.*articles/([0-9]*)/ articles.php?r=$1
RewriteRule ^.*articles articles.php
 
Но теперь мне надо, чтобы со старых страниц был 301-й редирект на новые, чтобы не терять PR, т.е. чтобы  
http://мой_сайт/articles.php  редиректилась на http://мой_сайт/articles/
http://мой_сайт/articles.php?r=2  на http://мой_сайт/articles/2/
http://мой_сайт/articles.php?r=2&s=3 на http://мой_сайт/articles/2/3.htm
 
Подтолкните к правильному решению плиз.

Всего записей: 7 | Зарегистр. 05-03-2006 | Отправлено: 13:21 14-04-2007
Открыть новую тему     Написать ответ в эту тему

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