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

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



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
2ramil
 
Приписываешь в .htaccess:

Код:
 
RewriteEngine on  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule ^(.*).html$ /index.php?id=$1
 

 
Теперь когда у тебя сылки будут такого вида:
 
www.site.ru/folder/param
 
в index.php пишеш:

Код:
 
$st = explode("/", $_REQUEST[id]);
list ($_REQUEST[m], $_REQUEST[a]) = $st
 

 
Теперь у тебя:
$_REQUEST[m] = folder;
$_REQUEST[a] = param;
 
c /forum не понял.

Всего записей: 360 | Зарегистр. 31-12-2006 | Отправлено: 12:22 01-02-2007 | Исправлено: Qwezar, 12:23 01-02-2007
dacuan

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

Код:
 
RewriteEngine on    
RewriteCond %{REQUEST_FILENAME} !-f    
RewriteCond %{REQUEST_FILENAME} !-d    
RewriteRule ^([^\/]+)/([^\/]+)?$ /index.php?m=$1&a=$2
 

 
И никаких доп. телодвижений в index.php делать не надо

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 17:21 01-02-2007
Qwezar



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
 
Возможно, а что если у меня в ссылке первая перемнная не 'm', а 'q' допустим?

Всего записей: 360 | Зарегистр. 31-12-2006 | Отправлено: 19:31 01-02-2007
dacuan

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

Цитата:
Возможно, а что если у меня в ссылке первая перемнная не 'm', а 'q' допустим?

И в чем проблема?

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



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
 
ну если у меня будет так:
 
www.site.ru/page/1
 
то 'm' будет равна 'page', а мне нужно чтоб 'q' была равна 'page'.

Всего записей: 360 | Зарегистр. 31-12-2006 | Отправлено: 13:21 02-02-2007
dacuan

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

Цитата:
нужно, чтобы все запросы к /folder перенаправлялись на /index.php?m=folder, а /folder/param на /index.php?m=folder&a=param, и чтобы ещё настоящая папка /forum тоде была доступна. можете помочь?

 
Ни слова о q! Откуда оно взялось?

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 16:48 02-02-2007
Qwezar



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

Всего записей: 360 | Зарегистр. 31-12-2006 | Отправлено: 17:07 02-02-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qwezar
Тогда давай полное описание проблемы

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 18:12 02-02-2007
2ramil

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
спасибо вариант работает, но охота ещё кой чего: чтобы был и третий параметр $b в пути, ну т.е. /folder/param/param1 == /?m=$1&a=$2&b=$3 и чтобы реврайт рул действовал и без завершающего слеша, например /folder, а не /folder/. проблему с существующими папками вроде как решил:
RewriteCond   %{REQUEST_URI} !^/tpl/
RewriteCond   %{REQUEST_URI} !^/forum/

Всего записей: 55 | Зарегистр. 23-10-2006 | Отправлено: 19:58 03-02-2007
Moonke

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно ли объединить в одном htaccess 2 условия ?
ПЕРВОЕ:
RewriteEngine on
RewriteBase /
RewriteCond %{REMOTE_ADDR} ^69.  
RewriteRule ^(.*)а1.php(.*)$ $1а2.php$2
ВТОРОЕ:
RewriteEngine on
RewriteBase /
RewriteCond %{REMOTE_ADDR} ^68.  
RewriteRule ^(.*)а3.php(.*)$ $1а4.php$2
 

Всего записей: 27 | Зарегистр. 26-06-2005 | Отправлено: 23:57 04-02-2007 | Исправлено: Moonke, 23:59 04-02-2007
Cheery



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

Цитата:
Можно ли объединить в одном htaccess 2 условия ?

только без второго

Цитата:
RewriteEngine on
RewriteBase /  

 


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:03 05-02-2007
Moonke

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


Цитата:
только без второго  

 
уже работает - спасибо

Всего записей: 27 | Зарегистр. 26-06-2005 | Отправлено: 01:00 05-02-2007
dacuan

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

Цитата:
проблему с существующими папками вроде как решил:  
RewriteCond   %{REQUEST_URI} !^/tpl/  
RewriteCond   %{REQUEST_URI} !^/forum/

 
Разве не сработало

Цитата:
RewriteCond %{REQUEST_FILENAME} !-f    
RewriteCond %{REQUEST_FILENAME} !-d  

?
 

Цитата:
спасибо  вариант работает, но охота ещё кой чего: чтобы был и третий параметр $b в пути, ну т.е. /folder/param/param1 == /?m=$1&a=$2&b=$3

 
По аналогии

Цитата:
RewriteEngine on    
RewriteCond %{REQUEST_FILENAME} !-f    
RewriteCond %{REQUEST_FILENAME} !-d    
RewriteRule ^([^\/]+)/(([^\/]+)([^\/]+)?)?$ /index.php?m=$1&a=$3&b=$4

 

Цитата:
 и чтобы реврайт рул действовал и без завершающего слеша, например /folder, а не /folder/

Универсальное решение для борьбы с завершающими слэшами я уже давал в этой ветке, поищи.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 11:04 05-02-2007
2ramil

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

Цитата:
Универсальное решение для борьбы с завершающими слэшами я уже давал в этой ветке, поищи

ок, попробую пролистать все 10 страниц
 
 
Добавлено:
зы. а вот, нашол

Цитата:
 
###########################  
#     SLASH PROBLEM  
###########################  
 
RewriteCond %{REQUEST_URI}      !/$  
RewriteCOND %{REQUEST_URI}      ![^/]*\.[^/]*$  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule ^(.*)$          http://%{HTTP_HOST}/$1/ [NS,L,R=301]
 

Всего записей: 55 | Зарегистр. 23-10-2006 | Отправлено: 16:38 05-02-2007
Moonke

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
почему-то не срабатывает такая запись :
 
RewriteCond %{REMOTE_HOST} ^www.google.ca$
RewriteRule ^(.*)a1.php(.*)$ $1a2.php$2
 
Варианты с заменой www.google.ca$ на:
www.google.ca/
http://www.google.ca/
http://www.google.ca/*
http://www.google.ca.
тоже не работают
 

Всего записей: 27 | Зарегистр. 26-06-2005 | Отправлено: 16:32 15-02-2007 | Исправлено: Moonke, 17:46 15-02-2007
Qwezar



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

Код:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*).htm$ /index.php?a=$1&b=$2&c=$3

т.е. сылки будут работать только в таком формате:
_http://site/a/b/c.htm
 
если написать _http://site/a/b.htm то уже не работают.
 
Как быть?

Всего записей: 360 | Зарегистр. 31-12-2006 | Отправлено: 20:46 17-02-2007
andead



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
можно книжку из шапки перезалить: Фридл Дж. Регулярные выражения
ftp не отвечает

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 17:23 18-02-2007
Brodyaga



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Qwezar
Все по логике. Делайте вручную уровни:
 RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*).htm$ /index.php?a=$1&b=$2&c=$3
RewriteRule ^(.*)/(.*).htm$ /index.php?a=$1&b=$2
RewriteRule ^(.*).htm$ /index.php?a=$1
Или как вам там надо. По другому никак, или обрабатывайте УРЛы скриптом.
 
Добавлено:
andead
В шапке есть новая прямая ссылка на книжку.

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 17:52 18-02-2007
Qwezar



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Brodyaga
 
Так пробовал, не получается, если ввести _http://site/a/b/c.htm, то id все берет на себя, да и при этом еще почему то index.php в начале возвращает.
 
Придется пользоваться скриптами.

Всего записей: 360 | Зарегистр. 31-12-2006 | Отправлено: 20:24 18-02-2007 | Исправлено: Qwezar, 20:24 18-02-2007
andead



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qwezar
а если так:
RewriteRule ^\/(.*?)\/(.*?)(\/(.*?))?\.htm$ /index.php?a=$1&b=$2&c=$4
 
Добавлено:
возможно слэши в htaccess экранировать не нада, но я по привычке)

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 23:33 18-02-2007 | Исправлено: andead, 23:35 18-02-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