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

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



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

Цитата:
их можно каким-нибудь похожим способом.. перебить, иль это издержки проксирования.

я же объяснил - правильные ссылки должен выдавать тот хост, к которому обращаются.
в задачу прокси не входит обработка и замена ссылок.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:08 23-10-2013
perdun



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

Цитата:
я же объяснил - правильные ссылки должен выдавать тот хост, к которому обращаются.  

дык с точки зрения хоста (бэкэнда) - они правильные (либо относительные, либо локалхост)
а вот на "фронте" они превращаются.. в элегантное имя виртуалхоста.. (С)
 
блин, даж нинаю чо придумать..
 
Добавлено:

Цитата:
ссылающиеся на имя вирт.хоста (всякие менюшки, "главная", и т.п.), дык они по-прежнему остаются..

я тут имел ввиду его (бэкэнда) собственное имя, а не другого вирт.хоста..
мошт, таки, над ним (запросом) еще как то на ходу  можно поиздевацца..?

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 11:44 23-10-2013
Cheery



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

Цитата:
я тут имел ввиду его (бэкэнда) собственное имя, а не другого вирт.хоста.

я же сказал, прокси выполняет сугубо одну роль - передать запрос дальше, получить ответ и вернуть его. и делает он это "как есть", то есть что получил, то и отдал.
 
Вам нужно или делать это скриптом, обрабатывая и меняя ссылки, пути к картинкам, css файлам..  
или же на бэкенды выдавать ссылки без имени сервера, но добавляя имя поддомена.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:38 24-10-2013 | Исправлено: Cheery, 03:51 24-10-2013
perdun



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
my brain halt.
 

Цитата:
я же сказал, прокси выполняет сугубо одну роль - передать запрос дальше, получить ответ и вернуть его. и делает он это "как есть", то есть что получил, то и отдал.  

это я понял.
нюанс в том, что на одном хосте (фронтенд) - есть модпрокси и там же модреврайт.. может быть эти задачи надо разделить по разным хостам..?
 

Цитата:
на бэкенды выдавать ссылки без имени сервера, но добавляя имя поддомена.

именно это я и хочу сделать..
может неверна логика конфига на фронтенде

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 07:35 24-10-2013
Cheery



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

Цитата:
нюанс в том, что на одном хосте (фронтенд) - есть модпрокси и там же модреврайт.. может быть эти задачи надо разделить по разным хостам..?  

я не понимаю что и зачем разделить.
[P] является последним правилом, что обрабатывается (то есть содержит флаг [L], по сути)
 
или вы о том, что у вас на тот же путь /поддомен настроен и mod_proxy?
что не так то, словами опишите.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 07:45 24-10-2013
perdun



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

Цитата:
на бэкенды выдавать ссылки без имени сервера, но добавляя имя поддомена.

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

Код:
<VirtualHost *:80>
    DocumentRoot "/usr/local/www/apache22/data"
    ServerName domen.tk
    ServerAlias www.domen.tk
    ErrorLog "/var/log/apache22/domen-error_log"
    CustomLog "/var/log/apache22/domen-access_log" common
 
RewriteEngine on
RewriteRule ^(.+)/(.*) http://$1.domen.tk/$2 [P]
RewriteLog /var/log/apache22/rewrite.log
RewriteLogLevel 9
 
</VirtualHost>
 
 
<VirtualHost *:80>
        ServerName finas.domen.tk
#    ServerAlias finas.domen.tk
    ErrorLog "/var/log/apache22/finas.domen-error_log"
    CustomLog "/var/log/apache22/finas.domen-access_log" common
    <Proxy balancer://finas >
        BalancerMember http://192.168.121.61:8015
    </Proxy>
    ProxyPass / balancer://finas/
    ProxyPassReverse / balancer://finas/
    ProxyRequests On
    ProxyPreserveHost On
</VirtualHost>  

 
или пихать болансер в первый вхост..? тада... вобще ничерта работать не будет..
 
Добавлено:
сейчас вот такая хрень..

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 13:50 25-10-2013
Cheery



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

Цитата:
я не пойму, как на бэкенд прилетит запрос без имени сервера,

говорилось о том, что бекенд должен иметь ссылки в своих страницах, которые соответствуют нужному пути на фронтенде.
 
и вместо ссылок вида http://сайт/путь
иметь ссылки вида /путь, в вашей ситуации вида /поддомен/путь

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:48 25-10-2013
perdun



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
тоесть, достаточно привести бэкенд к виду  
http://finas/index.php/rezultaty-monitor
и в болансере прописать его по имени..?  
 
просто сейчас они ходят там по айпи на нестандартный порт
http://192.168.121.61:8015/index.php/rezultaty-monitor
 

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 22:02 26-10-2013
Cheery



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

Цитата:
тоесть, достаточно привести бэкенд к виду

без http:/
 
/finas/index.php/rezultaty-monitor

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:09 26-10-2013
perdun



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
ааа.. ну да, понял.. короче относительные ссылки должны там быть..
блин, ну это хреновенько, однако.. как бы они не были зашиты там в бинарь..
 
еще один момент
как поправить правило реврайта, чтобы перекидывало только если после слэша чото есть?

Код:
RewriteRule ^/(.+)/?(.*) http://$1.domen.tk/$2 [P]

ибо сейчас ошибка 502, если открывать без ничего http://domen.tk

Код:
Reason: DNS lookup failure for: index.php.domen.tk

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 02:08 27-10-2013 | Исправлено: perdun, 02:10 27-10-2013
Cheery



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

Цитата:
как поправить правило реврайта, чтобы перекидывало только если после слэша чото есть?  

вместо .* написать .+, ну и убрать ? перед /

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:17 27-10-2013
perdun



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

Код:
217.118.79.43 - - [27/Oct/2013:05:38:10 +0700] [www.domen.tk/sid#28533d58][rid#290d7058/initial] (2) init rewrite engine with requested uri /finas/
217.118.79.43 - - [27/Oct/2013:05:38:10 +0700] [www.domen.tk/sid#28533d58][rid#290d7058/initial] (3) applying pattern '^/(.+)/(.+)' to uri '/finas/'
217.118.79.43 - - [27/Oct/2013:05:38:10 +0700] [www.domen.tk/sid#28533d58][rid#290d7058/initial] (1) pass through /finas/

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 02:52 27-10-2013
Cheery



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

Цитата:
нот фоунд, аднака

вы же сами просили, что после слеша должно что то быть?

Цитата:
 /finas/

ничего нет после слэша.
 
или о каком говорили? приводите всегда примеры

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:56 27-10-2013
perdun



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
большое пасиба за помощь
 
неа, чота нифига не разобрался
фегня какаята
 
нада чтобы так
http://domen.tk/
или так http://domen.tk
правило не срабатывало
а если так
http://domen.tk/finas
или так http://domen.tk/finas/
то на субдомен http://finas.domen.tk


Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 03:08 27-10-2013 | Исправлено: perdun, 03:23 27-10-2013
MisHel64



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Столкнулся со странным..
(1) RewriteCond %{REQUEST_URI}    ^(.*)\.php$                    [NC]
(2) RewriteRule ^(.*)\.php$        http://%{SERVER_NAME}/aaa.html?%{REQUEST_URI}&bbb    [R=301,NC,L]
(3) RewriteRule ^[^\.]*$        /index.php                    [NC,L]
 
перехожу на сайт, и меня перебрасывает  на http://${SERVER_NAME}/aaa.html?/index.php&bbb
 
Получается, что REQUEST_URI это не всегда запрошенный URI?
Что вместо него тогда можно использовать в RewriteCond?

Всего записей: 2307 | Зарегистр. 21-09-2006 | Отправлено: 17:23 27-10-2013
Cheery



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

Цитата:
или так http://domen.tk  
правило не срабатывало  
а если так  

 
ну, так чем это плохо?  
 

Цитата:
RewriteRule ^/(.+)/?(.*) http://$1.domen.tk/$2 [P]

 
вы же понимаете, что
Цитата:
Reason: DNS lookup failure for: index.php.domen.tk

потому, что ваш запрос выглядит как http://domen.tk/index.php ?
 
с точки зрения правила - разницы между index.php и finas - нет.
придумайте как хотите отличать, тогда и проблем не будет.
 
можно добавить  
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 
чтобы правило срабатывало только к несуществующим на фронтенде файлам (если есть).
 
 
 
MisHel64

Цитата:
Получается, что REQUEST_URI это не всегда запрошенный URI?  

не совсем вас понял..
 
у вас срабатывает два раза..
 
сначала идет на
Цитата:
RewriteRule ^[^\.]*$        /index.php                    [NC,L]

после этого апач делает подзапрос, снова проверяется и
Цитата:
RewriteRule ^(.*)\.php$        http://%{SERVER_NAME}/aaa.html?%{REQUEST_URI}&bbb    [R=301,NC,L]  

 
что не так?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:59 27-10-2013 | Исправлено: Cheery, 22:04 27-10-2013
MisHel64



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

Цитата:
после этого апач делает подзапрос,

В том то и дело, что не подзапрос. Флаг подзапроса (не помню как зовут) в false установлен.
А второй запрос, при этом REQUEST_URI уже равен результату первого преобразования, а не реальному запросу, что в общем-то было не очевидно из документации.

Всего записей: 2307 | Зарегистр. 21-09-2006 | Отправлено: 09:03 28-10-2013
Cheery



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

Цитата:
А второй запрос, при этом REQUEST_URI уже равен результату первого преобразования, а не реальному запросу, что в общем-то было не очевидно из документации.  

я это и имел в виду. что это новый запрос, так как предудыщий закончился переходом на index.php


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:23 28-10-2013
perdun



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

Цитата:
ну, так чем это плохо?  

ага, всё хорошо)
а порядок правил имеет значение?
а можно чтоб только на finas реагировал (а чтобы "что попало" в игнор)?

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 13:32 28-10-2013
Cheery



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

Цитата:
а порядок правил имеет значение?  

в смысле? сверху вниз.
все RewriteCond имеют отношение только к последующему RewriteRule

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:21 28-10-2013
Открыть новую тему     Написать ответ в эту тему

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