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

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Когда я пишу "сайт/asdsd" срабатыват редирект, все ок,
а когда именно с индексом сайт/index.php/тут_чего-нибудь_чего_нет", то нагрузка растет, браузер просто думает, я вижу в дебаге внизу на сайте что кол-во запросов к базе и нагрузка на неё так же растут. Не знаю куда копать.

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 23:27 20-08-2013 | Исправлено: Laterport, 23:28 20-08-2013
Cheery



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

Цитата:
а когда именно с индексом сайт/index.php/тут_чего-нибудь_чего_нет",

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

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

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Может мне использовать какую-нибудь конструкцию реврайта чтобы вот такие вещи просто срезать? "*.php/dfdfdfdfdfd"? Т.е. если подобное забивают, чтобы возвращало просто на "*php". Подскажите, пожалуйста правильные выражения для этого.

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 08:16 21-08-2013
Cheery



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

Цитата:
Подскажите, пожалуйста правильные выражения для этого.

не лучше ли исправить ваш скрипт?
добавьте в него просто первой строкой, что если есть $_SERVER['PATH_INFO'], то перекинуть на себя и все..
 
Иначе просто проверяйте, есть ли в строке запроса \.php/


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 08:30 21-08-2013
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Дело в том что скрипт это движок, в котором я не вижу например $_SERVER['PATH_INFO'].
Аналогичные движки используют десятки других людей и на их страницах проблем нет.  
Подскажите, пожалуйста на примере как отсекать \.php/  
А вообще, я подозреваю ещё что конфиг nginx нужно поковырять, может там что криво прописано по отношению к бекенду.... Покажу тут в соответствующей теме конфиг.

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 08:44 21-08-2013
Cheery



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

Цитата:
Подскажите, пожалуйста на примере как отсекать \.php/  
 

RewriteCond %{PATH_INFO} !^$
RewriteRule (.*)\.php  $1.php [L,R=301]
 
не проверял, но что то такое

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 08:53 21-08-2013 | Исправлено: Cheery, 08:54 21-08-2013
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Тысячу лучей теплого света Вам!  
Теперь все ОК! Большое спасибо!
 
ЗЫ:
Школиё на другом форуме какую-то дрянь советовала, типа:
 
RewriteRule ^((.*?)\.php)/   $1 [NC,L]
 

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 09:55 21-08-2013
Cheery



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

Цитата:
на другом форуме какую-то дрянь советовала, типа:

ну может и сработала бы.. просто проще проверять наличие PATH_INFO
и можно переписать вторую строку, чтобы покороче
RewriteRule (.*\.php)  $1 [L,R=301]
 
флаг NC - чтобы не учитывало регистр, но это уже по желанию/вкусу

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

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Ещё раз спасибо. Вы часто выручаете!

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 10:06 21-08-2013
IFKey



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Просьба помочь с простым редиректом
Задача:
Перекинуть юзера с этого адреса (1): /index.php?option=com_akeebasubs&view=subscriptions&layout=default
На этот адрес (2): /online-subscription/subscribers-zone/subscriptions
Или можно сделать так чтобы скрипт зайдя на 1 адрес выполнял 2
Я перепробовал кучу примеров в том числе:
 

Цитата:
RewriteRule ^/online-subscription/subscribers-zone/subscriptions /index.php?option=com_akeebasubs&view=subscriptions&layout=default [L]


Цитата:
RewriteCond ^index.php?option=com_akeebasubs&view=subscriptions&layout=default$ [NC]
RewriteRule online-subscription/subscribers-zone/subscriptions [R=permanent,L]

 
Но ничего не работает, ошибок не выдает, но работа скрипта 2 не выполняется.
Так же перепробовал кучу вариантов, думал мол в адресах ошибался, со / и без него и т.п.

Всего записей: 331 | Зарегистр. 20-03-2007 | Отправлено: 14:36 16-09-2013 | Исправлено: IFKey, 14:44 16-09-2013
Bubek

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попробуйте что-то вроде этого:
 
RewriteCond %{QUERY_STRING} ^/option=com_akeebasubs&view=subscriptions&layout=default$ [NC]
RewriteRule ^index\.php[?a-z0-9_-]* /online-subscription/subscribers-zone/subscriptions? [R=301,L]

Всего записей: 312 | Зарегистр. 26-01-2006 | Отправлено: 17:28 16-09-2013
perdun



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

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



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

Цитата:
Нужно, что бы при открытии www.domen.ru/host1 перебрасывало на host1.domen.ru, ну и так далее по списку..  
Причем сама адресная строчка http://www.domen.ru/host1 при этом меняться не должна.  

эм.. а поддомены на том же сервере и у апача есть к ним доступ?
сделайте алиасы
 
иначе вам придется прописывать правила на уровне virtualhost (правда и алиасы тоже).
.htaccess в папке не поможет.
 
ну или делать проксирование с помощью mod_proxy или же скриптов

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

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



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

Цитата:
эм.. а поддомены на том же сервере и у апача есть к ним доступ?
сделайте алиасы  

нет, в том и дело, что не на том же!
субдомены обслуживают независимые сервера, в т.ч. на разных платформах\движках..
 
смысл в том, что я хочу создать единую точку входа, раскидывающую запросы, в зависимости от того чего хочется..
 
на "фронтенде" поднят апач с прокси-балансером с наконфигуреными вирт.хостами каждый в свой субдомен..  
 
и всё как бэ даже работает.. просто не хочется светить в адр.строчке субдомены...
воть. как тотак хочу

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



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
perdun
тогда только через проксирование  
 
http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_p
 
но и ссылки тогда другие серверы должны выдавать правильные
 
то есто что то вида
RewriteRule ^(.+)/(.*)  http://$1.site.ru/$2 [P]

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 07:23 22-10-2013 | Исправлено: Cheery, 07:30 22-10-2013
perdun



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

Цитата:
тогда только через проксирование

да-да-да-да..
именно так и хочу сделать)
 
а куда правило писать? в хтакцесс или в конфигу вхоста?

Код:
cat .htaccess
 
RewriteEngine on
RewriteRule ^(.+)/(.*)  http://$1.domen.tk/$2 [P]
RewriteLog /var/log/apache22/rewrite.log
RewriteLogLevel 9
 

поклал в диру фронтенда
чота ничо не логирует модуль..
апач 500-й ошибкой плюется и всё..

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



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

Цитата:
апач 500-й ошибкой плюется и всё

ну так посмотрите лог ошибок сервера
 

Цитата:
RewriteLog /var/log/apache22/rewrite.log  

не используется в .htaccess, если мне не изменяет память

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:04 22-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>
 

 
теперь в rewrite.log так:
 

Код:
217.118.79.41 - - [23/Oct/2013:00:14:41 +0700] [domen.tk/sid#28533428][rid#290d7058/initial] (2) init rewrite engine with requested uri /finas
217.118.79.41 - - [23/Oct/2013:00:14:41 +0700] [domen.tk/sid#28533428][rid#290d7058/initial] (3) applying pattern '^(.+)/(.*)' to uri '/finas'
217.118.79.41 - - [23/Oct/2013:00:14:41 +0700] [domen.tk/sid#28533428][rid#290d7058/initial] (1) pass through /finas

 
где не так?
конструкция вида finas.domen.tk по прежнему, как открывалась, так и открывается нормально..
а вот в domen.tk/finas - 404 ошибка
 

Код:
root@ws4:/var/log/apache22 # cat domen-access_log
217.118.79.41 - - [23/Oct/2013:00:14:41 +0700] "GET /finas HTTP/1.1" 404 203
root@ws4:/var/log/apache22 # cat domen-error_log
[Wed Oct 23 00:14:41 2013] [error] [client 217.118.79.41] File does not exist: /usr/local/www/apache22/data/finas


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



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

Цитата:
где не так?  

ну элементарно же.. слеши.. и если правило прописывается в конфиге, то путь там начинается с /
 
RewriteRule ^/(.+)/?(.*)  http://$1.site.ru/$2 [P]
 
вот так попробуйте.
 
все, кроме создания логов, можно указать и в htaccess
но тогда нет начального слеша.

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

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



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
ога, спасиба  
 
единственно, еще такой момент
внутри сайта сцылки, ссылающиеся на имя вирт.хоста (всякие менюшки, "главная", и т.п.), дык они по-прежнему остаются..
http://finas.domen.tk/index.php/rezultaty-monitor
 
их можно каким-нибудь похожим способом.. перебить, иль это издержки проксирования..?

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 22:55 22-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