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

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



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Если убрать передачу ID тогда необходимо изменить скрипт CMS. Надо ли это?

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

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 13:57 07-08-2007
Break_Action



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, подскажите плз как организовать редирект.
пользователи будут приходить на сайт по динкам типа
http://1234.site.com
http://5678.site.com
далее надо их отредиректить на  
http://www.site.com/cgi-bin/index.pl?param=1234
http://www.site.com/cgi-bin/index.pl?param=5678
 
То есть брать номер не существующего субдомена и подставлять его параметром к скрипту.
Заранее благодарен!

Всего записей: 296 | Зарегистр. 12-09-2001 | Отправлено: 17:18 09-08-2007
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Break_Action,
http://forum.ru-board.com/topic.cgi?forum=31&topic=8134&start=300#12
 


 
Я понимаю, что даже через mod_rewrite нельзя обработать данные после якоря (#)?
Что-то на подобии

Код:
RewriteRule ^\#test/?$ index.php?foo=bar [L]

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 09:21 13-08-2007 | Исправлено: 6epcepk, 09:30 13-08-2007
dacuan

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

Цитата:
То есть брать номер не существующего субдомена и подставлять его параметром к скрипту.

Субдомен ДОЛЖЕН существать иначе браузер просто не будет знать куда его направлять. Более того, для того, чтобы mod_rewrite мог их обрабатывать, все субдомены должны быть прописаны алиасами к основному.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 11:41 13-08-2007
Doublek

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

Код:
subdomain.site.ru/index.php

выдавалась страница с запросом

Код:
index.php?site=subdomain...

Насколько знаю - такое возможно через mod_rewrite + создание алиаса сайта
 
Создал DNS запись с привязкой на тот же сайт и конструкцию в .htaccess
 

Код:
RewriteEngine on
RewriteBase /
 
RewriteCond %{HTTP_HOST}  ^subdomain\.  
RewriteRule (.*)    /?site=subdomain  

 
Выдает 500 ошибку... отсуствует возможность смотреть логи..
Не могли бы Вы подсказать что я сделал не так, или другой путь решения
 
Заранее спасибо!

Всего записей: 2 | Зарегистр. 16-08-2007 | Отправлено: 23:07 16-08-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Doublek
А вы уверены, что проблема именно в этих строках? Если их закомментировать все 500 ошибка не выдается?

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйтса как сделать из такой ссылки
 
Код:
 http://site.ru/pic.php?img=02b-f6.jpg&t=Дизайн%20интерьера

 
сделать вот такую:

Код:
 http://site.ru/02b-f6.jpg/Дизайн%20интерьера/  

 
или хотя бы так

Код:
 http://site.ru/02b-f6/Дизайн%20интерьера/  

 
 
Заранее очень благодарен

Всего записей: 1 | Зарегистр. 17-08-2007 | Отправлено: 18:35 17-08-2007 | Исправлено: lStaticl, 18:41 17-08-2007
Doublek

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dacuan
Уверен,  если без них то загружается основная версия без

Код:
?site=subdomain...

 

Всего записей: 2 | Зарегистр. 16-08-2007 | Отправлено: 23:56 17-08-2007
dacuan

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

Код:
RewriteEngine on  
RewriteBase /  
 
RewriteCond %{HTTP_HOST}  ^subdomain\.  
RewriteRule (.*)    index.php?site=subdomain

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:19 20-08-2007
crimea360

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет.  
Есть сайт и он проиндексирован.
Изменили формат ссылок с /?a=1&b=2 на /a/1/b/2/index.html
 
В .htaccess прописал(отрывок)
RewriteRule ([^/]*)/([^/]*)/([^/]*)/([^/]*)/index\.html  /?$1=$2&$3=$4 [L]
RewriteRule ([^/]*)/([^/]*)/index\.html  /?$1=$2 [L]
 
Теперь не могу придумать как сделать так чтобы когда заходишь по старым ссылкам
/?a=1&b=2 они автоматически редиректились на /a/1/b/2/index.html.
 
Может кто подскажет?

Всего записей: 29 | Зарегистр. 03-01-2007 | Отправлено: 10:47 21-08-2007
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
перед
Цитата:
/?a=1&b=2
что стояло строке браузера?
если index.php, то и сделайте так, чтобы вызов с index.php перенаправлялся на него же.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 13:27 21-08-2007
crimea360

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

Цитата:
что стояло строке браузера?  
если index.php, то и сделайте так, чтобы вызов с index.php перенаправлялся на него же.

 
Так а как это сделать?  
Cколько вариантов пробовал, ничего не получается

Всего записей: 29 | Зарегистр. 03-01-2007 | Отправлено: 15:29 21-08-2007
Tstf



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нажно сделать так, чтобы боты google, yandex, rambler и yahoo не индексировали форум по адресу mysite.net. Но непросто написать что-то вроде  
 
 

Код:
RewriteCond %{HTTP_USER_AGENT} ^.*Slurp.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*msnbot.* [NC]
RewriteRule ^(.*)$ - [F]

 
а написать так, чтобы именно по адресу mysite.net, а по адресу mysite2.net и боты и я спокойно ползали бы.
 
 
PS пробовал так, не вышло.

Код:
 
RewriteCond %{HTTP_USER_AGENT} !^yandex.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^googlebot.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^.*gaisbot.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^rambler.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^aport.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^metacrawler.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^msnbot.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^.*crawler.* [NC]
RewriteCond %{HTTP_REFERER} ^.www.mysite.net$ [OR]
RewriteCond %{HTTP_REFERER} ^.mysite.net$  
 
RewriteRule ^(.*)$ http://mysite.net/forum.html [R=301,L]
 


----------
Заработок 2.0

Всего записей: 788 | Зарегистр. 22-04-2003 | Отправлено: 10:36 22-08-2007
dacuan

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

Код:
 RewriteCond %{HTTP_USER_AGENT} !^yandex.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^googlebot.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^.*gaisbot.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^rambler.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^aport.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^metacrawler.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^msnbot.* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} !^.*crawler.* [NC]  
RewriteCond %{HTTP_HOST} ^www.mysite.net$ [OR]  
RewriteCond %{HTTP_HOST} ^mysite.net$
 
RewriteRule ^(.*)$ http://mysite.net/forum.html [R=301,L]

 
Добавлено:
crimea360
Вот это должно работать, сам не проверял

Код:
RewriteCond %{QUERY_STRING}  ^a=([^&]+)&b=([^&]+)
RewriteRule .*   /a/%1/b%2/index.html [L,R=301]  

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:44 22-08-2007
Tstf



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuanТогда и ботом и всех остальных кидает на http://mysite.net/form.html
 И причём цикл не прекращается... т.е. приходя на http://mysite.net/form.html кидает снова на http://mysite.net/form.html и так вечно.

----------
Заработок 2.0

Всего записей: 788 | Зарегистр. 22-04-2003 | Отправлено: 11:10 22-08-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tstf
Был неправ Вот это должно убрать вечный цикл

Код:
RewriteCond %{HTTP_USER_AGENT} !^yandex.* [NC,OR]    
RewriteCond %{HTTP_USER_AGENT} !^googlebot.* [NC,OR]    
RewriteCond %{HTTP_USER_AGENT} !^.*gaisbot.* [NC,OR]    
RewriteCond %{HTTP_USER_AGENT} !^rambler.* [NC,OR]    
RewriteCond %{HTTP_USER_AGENT} !^aport.* [NC,OR]    
RewriteCond %{HTTP_USER_AGENT} !^metacrawler.* [NC,OR]    
RewriteCond %{HTTP_USER_AGENT} !^msnbot.* [NC,OR]    
RewriteCond %{HTTP_USER_AGENT} !^.*crawler.* [NC]  
RewriteCond %{HTTP_HOST} ^www.mysite.net$ [OR]  
RewriteCond %{HTTP_HOST} ^mysite.net$  
RewriteCond %{REQUEST_URI} !^forum\.html$
   
RewriteRule ^(.*)$ http://mysite.net/forum.html [R=301,L]

но я не понимаю почему боты отрабатывают по этому правилу. Можете привести кусок лога преобразования?

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 11:23 22-08-2007 | Исправлено: dacuan, 11:24 22-08-2007
Tstf



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Цикл  всё равно повторяется... и по адресу mysite.net никто зайти не может.
 

Цитата:
но я не понимаю почему боты отрабатывают по этому правилу. Можете привести кусок лога преобразования?

А где мне его взять?

----------
Заработок 2.0

Всего записей: 788 | Зарегистр. 22-04-2003 | Отправлено: 11:51 22-08-2007
crimea360

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

Цитата:
RewriteCond %{QUERY_STRING}  ^a=([^&]+)&b=([^&]+)  
RewriteRule .*   /a/%1/b%2/index.html?  [L,R=301]  

 
Я вчера этот вариант пробовал, нашел описние сдесь:
http://xpoint.ru/forums/internet/webservers/apache/thread/29011.xhtml
 
Но в этом случае получается непрекращающийся цикл
Вот отрывок из access_log

Код:
 
[21/Aug/2007:14:29:14 +0000] "GET /n1/1/index.html HTTP/1.1" 301 344 "-"  
[21/Aug/2007:14:29:15 +0000] "GET /n1/1/index.html HTTP/1.1" 301 344 "-" "Mozilla/4.0  [21/Aug/2007:14:29:15 +0000] "GET /n1/1/index.html HTTP/1.1" 301 344 "-" "Mozilla/4.0 [21/Aug/2007:14:29:15 +0000] "GET /n1/1/index.html HTTP/1.1" 301 344 "-" "Mozilla/4.0 [21/Aug/2007:14:29:16 +0000] "GET /n1/1/index.html HTTP/1.1" 301 344  


Всего записей: 29 | Зарегистр. 03-01-2007 | Отправлено: 11:51 22-08-2007 | Исправлено: crimea360, 11:53 22-08-2007
dacuan

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

Код:
RewriteCond %{QUERY_STRING}  ^a=([^&]+)&b=([^&]+)  
RewriteRule ^index\.php$   /a/%1/b%2/index.html?  [L,R=301]

 
Tstf
Чтобы включить лог mod_rewrite необходимо в описании вашего виртуального хоста добавить две строчки:

Код:
RewriteLog  /путь/к/лог/файлу
RewriteLogLevel 9

И перезапустить апача. Крайне не рекомендуется производить это на работающем сервере, так как объемы отладочной информации генерируются действительно большие и найти свое бывает очень сложно.  
 

Цитата:
Цикл  всё равно повторяется... и по адресу mysite.net никто зайти не может.

Трудно что-то сказать. Нужен либо файл лога, либо скопируйте сюда ваш .htaccess и покажите вид URL для обычной страницы форума. Но лог все-таки лучше.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 12:28 22-08-2007
crimea360

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

dacuan
 

Код:
 
RewriteCond %{QUERY_STRING}  ^([^/]*)=([^/]*)  
RewriteRule ^$   /%1/%2/index.html? [L,R=301]  
 

 
Если закоментировать строки
 

Код:
 
RewriteRule ([^/]*)/([^/]*)/([^/]*)/([^/]*)/index\.html  /?$1=$2&$3=$4 [L]  
RewriteRule ([^/]*)/([^/]*)/index\.html  /?$1=$2 [L]  
 

 
то все работает отлично, вернее редирект внутрений происходит, но скрипт естественно не работает. То есть полученную ссылку /a/1/b/2/index.html  сервер не расматривает как
/?a=1&b=2.  
 

Цитата:
Есть сайт и он проиндексирован.  
Изменили формат ссылок с /?a=1&b=2 на /a/1/b/2/index.html  
 
В .htaccess прописал(отрывок)  
RewriteRule ([^/]*)/([^/]*)/([^/]*)/([^/]*)/index\.html  /?$1=$2&$3=$4 [L]  
RewriteRule ([^/]*)/([^/]*)/index\.html  /?$1=$2 [L]  
 
Теперь не могу придумать как сделать так чтобы когда заходишь по старым ссылкам  
/?a=1&b=2 они автоматически редиректились на /a/1/b/2/index.html


Всего записей: 29 | Зарегистр. 03-01-2007 | Отправлено: 13:23 22-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