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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Точно, почитать лог не догадался
Сейчас посмотрел, написано: "RewriteMap not allowed here"
И что это значит?
у меня файл .htaccess выглядит так:

Код:
 
RewriteEngine On
RewriteMap map txt:/usr/local/www/map.txt
и т.д...
 

файл там есть, права сейчас выставил 777. Эффект тот же.
 
Без RewriteMap преобразования выполняются, так что mod_rewrite работает.

Всего записей: 281 | Зарегистр. 05-04-2006 | Отправлено: 18:07 16-07-2007
Cheery



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

Цитата:
И что это значит?  

http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteMap

Цитата:
Context: server config, virtual host

то есть только через httpd.conf, то есть через настройку сервера

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:09 16-07-2007
iltmpz

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ой, точно, недочитал
Спасибо, значит буду разбираться с httpd.conf (почему-то оттуда у меня вообще mod_Rewrite не работает...)

Всего записей: 281 | Зарегистр. 05-04-2006 | Отправлено: 18:23 16-07-2007
Caslix

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как все таки можно реализовать редирект со всех подобных страниц http://www.site.ru/?asdfasdf на главную. Нужен именно редирект, а не просто, чтобы по таким урлам была главная...

Всего записей: 4 | Зарегистр. 11-07-2007 | Отправлено: 09:37 17-07-2007
Cheery



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

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

блин.. повторяю еще раз.. это и есть главная.. mod_rewrite тут не нужен.
в корне лежит index.php?
вот и смотришь в нем, какие аргументы в GET запросе и делает форвард куда тебе надо

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:15 17-07-2007
iltmpz

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
разобрался, у меня в httpd.conf работают RewriteMap и RewriteLog, а RewriteRule не работает. А в .htaccess наоборот.
прописал RewriteRule в .htaccess в корень веб-сервера, все работает (хоть это и несколько криво)

Всего записей: 281 | Зарегистр. 05-04-2006 | Отправлено: 15:19 19-07-2007
Cheery



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

Цитата:
а RewriteRule не работает

все работает.. просто нужно правильно писать.. RewriteEngine on писал до этого?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:09 19-07-2007
iltmpz

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да, конечено.
В httpd.conf сразу после строк AddModule:

Код:
RewriteEngine On
RewriteMap map prg:/usr/local/map.pl
RewriteRule ^(.*)$ ${map:$1}
RewriteLog /var/log/apache/mod_rewrite.log
RewriteLogLevel 9

Так вот RewriteMap RewriteLog работают, а RewriteRule - нет.
 
А в .htaccess RewriteRule работает.

Всего записей: 281 | Зарегистр. 05-04-2006 | Отправлено: 12:42 20-07-2007
kririll

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят, помогите:  
мне надо направлять людей на определенную страницу моего сайта, если они пришли на мой сайт с другого сайта.  
 
У меня есть такая конструкция:  

Код:
 
RewriteEngine on  
RewriteCond %{HTTP_REFERER} !^http://www.test2.ru/cms8  
RewriteCond %{HTTP_REFERER} !^http://test2.ru/cms8  
RewriteRule /* http://www.test2.ru/cms8/warning.htm [R,L]  
 

Но не работает. Страница "warning.htm" типа грузится, но не загружается. Если ввожу адрес http://www.test2.ru/cms8/warning.htm, то выдается следующее:  

Found  
The document has moved here.  
Apache/1.3.33 Server at www.test2.ru Port 80  

Помогите, пожалуйста!

Всего записей: 27 | Зарегистр. 16-03-2007 | Отправлено: 21:13 20-07-2007 | Исправлено: kririll, 21:15 20-07-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kririll
а страницу назад перемотать???
mod_rewrite: документация, готовые решения, вопросы

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:31 20-07-2007
Mamayka



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
если было ткните носом...
топик пролистал ненашол..
 
есть сайт mysite.com
есть blog который живёт в mysite.com/blog
как сделать чтобы работало blog.mysite.com
 
или это к mod_rewrite не относиться ?

Всего записей: 13 | Зарегистр. 16-01-2007 | Отправлено: 18:33 23-07-2007
Cheery



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

Цитата:
или это к mod_rewrite не относиться ?

нет.. это настройки веб сервера.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:54 23-07-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mamayka
В настройке веб-сервера (файл httpd.conf) необходимо сделать алиас для основного домена:

Код:
ServerName mysite.com
ServerAlias blog.mysite.com

 
В корне сайта создается файл .htaccess:

Код:
RewriteEngine   On
RewriteBase /
RewriteCond %{HTTP_HOST} ^blog.mysite.com$
RewriteRule ^(.*)$       blog/$1  [NS,L]  

 
Должно сработать. Если нет доступа к httpd.conf, то можно послать запрос хостеру, обычно не отказывают.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:24 24-07-2007
Rando1

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

Код:
RewriteRule ^news/date/(.*)/page/([0-9]+)\.html(/?)+$ index.php?name=News&op=date&d=$1&pagenum=$2 [L]

 
Перенаправляет явно не туда куда мне нужно )

Всего записей: 110 | Зарегистр. 11-06-2006 | Отправлено: 14:32 28-07-2007
6epcepk



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

Код:
DirectoryIndex /
RewriteEngine On
 
RewriteRule ^news/(.*)/(.*)/?$ index.php?module=news&category=$1&news=$2 [L]

 
Но в глобальном массиве:

Код:
$_REQUEST['module']   = "news";
$_REQUEST['category'] = "1/2"; (должна быть одна цифра)
и нету
$_REQUEST['news'] = "2";

 
Примитивная ошибка где-то..

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

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 21:57 29-07-2007 | Исправлено: 6epcepk, 21:59 29-07-2007
Cheery



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

Цитата:
Примитивная ошибка где-то..

не используй .* - он тебе захватит все.. и те же скобки
news/(\d+)/(\d+)/?$


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:06 29-07-2007
6epcepk



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

Код:
Array
(
    [module] => news
    [category] => 15/34
)


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

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 22:15 29-07-2007
Cheery



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

Цитата:
То же самое:

ок, замени \d на [0-9]
в регулярках \d определяет класс чисел.. не помню есть ли в mod_rewrite


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:21 29-07-2007
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да, действительно, у меня было две ошибки:
1) я использовал из регулярных выражений \w
2) перед данной конструкцией стояла конструкция

Код:
RewriteRule ^news/(.*)(/?)/?$ index.php?module=news&category=$1 [L]

Которая и перехватывала мой вывод.
Спасибо за помощь.

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

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 22:43 29-07-2007
arcanum



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть CMS, которая генерит ссылки вот такого вида
 
http://site.ru/index.php?id=34&doc=nashi_predlozheniya
 
В логике работы системы, прописано, что по id из базы выбирается все все все что относится к данной странице. Существует реврайт, который преобразует вот это
 
index.php?id=34&doc=nashi-predlozheniya
 
в это
 
nashi-predlozheniya-34.html  
 
В принципе тут все просто - название страницы - это просто перепарсинный заголовок из русских букв...Но проблема в том, что нужно убрать циферу 34 и оставить только название. Возможно ли это?
 
В настоящий момент правило таково
RewriteRule ^([-_a-zA-Z0-9]+)-([0-9]+).html$ index.php?id=$2&doc=$1
 

Всего записей: 162 | Зарегистр. 17-03-2006 | Отправлено: 08:48 07-08-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