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

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



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

Цитата:
А если прописать так, RewriteBase /reg а каталогов будет несколько?

переписывать перед каждым условием..  

Цитата:
The RewriteBase directive explicitly sets the base URL for per-directory rewrites. As you will see below, RewriteRule  can be used in per-directory config files (.htaccess). In such a case, it will act locally, stripping the local directory prefix before processing, and applying rewrite rules only to the remainder. When processing is complete, the prefix is automatically added back to the path. The default setting is; RewriteBase physical-directory-path

но в целом должно работать и без..  
включите на время логирование обработки правил и посмотрите
 
 

Цитата:
я так писал, тогда все пути меняются на /reg/ у скриптов, картинок итд.  

не верится что то.. значит написали что то не так.
 
включите логирование и приведите лог

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:51 21-03-2009 | Исправлено: Cheery, 21:53 21-03-2009
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В форум лог не вставился, http://rapidshare.com/files/211898912/log.rar.html
MD5: 09D0CFBE7DB7A3764F481FD16EB90165  вот. Там пример на cms, но в моих скриптах аналогично отрабатывает. Просто в cms больше графики и все наглядно видно.
 
Добавлено:
Все выводится как нужно, ЧПУ работает. Но все пути меняются на каталог указанный в ЧПУ. Я почему и попросил помощи, указываю вро-ди все верно, аналогично как и вы мне сказали было ранее указанно.
 
Добавлено:
RewriteEngine On
RewriteBase /reg
RewriteRule ^reg/reg.html$ http://127.0.0.1/index.php?reg=reg [L]

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 22:06 21-03-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
usertum
я не вижу срабатываний в логе.. вы уверены, что именно так и происходит?

Цитата:
127.0.0.1 - - [22/Mar/2009:00:00:40 +0500] [127.0.0.1/sid#93bd30][rid#1ef6318/initial/redir#1] (3) [per-dir C:/Program Files/VertrigoServ/www/] strip per-dir prefix: C:/Program Files/VertrigoServ/www/index.php -> index.php
127.0.0.1 - - [22/Mar/2009:00:00:40 +0500] [127.0.0.1/sid#93bd30][rid#1ef6318/initial/redir#1] (3) [per-dir C:/Program Files/VertrigoServ/www/] applying pattern '^reg/reg.html$' to uri 'index.php'
127.0.0.1 - - [22/Mar/2009:00:00:40 +0500] [127.0.0.1/sid#93bd30][rid#1ef6318/initial/redir#1] (3) [per-dir C:/Program Files/VertrigoServ/www/] strip per-dir prefix: C:/Program Files/VertrigoServ/www/index.php -> index.php
127.0.0.1 - - [22/Mar/2009:00:00:40 +0500] [127.0.0.1/sid#93bd30][rid#1ef6318/initial/redir#1] (3) [per-dir C:/Program Files/VertrigoServ/www/] applying pattern '^index.html' to uri 'index.php'
127.0.0.1 - - [22/Mar/2009:00:00:40 +0500] [127.0.0.1/sid#93bd30][rid#1ef6318/initial/redir#1] (1) [per-dir C:/Program Files/VertrigoServ/www/] pass through C:/Program Files/VertrigoServ/www/index.php

не сработало.
 

Цитата:
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] add path info postfix: C:/Program Files/VertrigoServ/www/jabber -> C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] strip per-dir prefix: C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif -> jabber/images/logos/logo_web_2_2.gif
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] applying pattern '^reg/reg.html$' to uri 'jabber/images/logos/logo_web_2_2.gif'
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] add path info postfix: C:/Program Files/VertrigoServ/www/jabber -> C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] strip per-dir prefix: C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif -> jabber/images/logos/logo_web_2_2.gif
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] applying pattern '^index.html' to uri 'jabber/images/logos/logo_web_2_2.gif'
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (1) [per-dir C:/Program Files/VertrigoServ/www/] pass through C:/Program Files/VertrigoServ/www/jabber

аналогично.
покажите где срабатывает

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:15 21-03-2009
usertum



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

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 22:20 21-03-2009 | Исправлено: usertum, 22:38 21-03-2009
Cheery



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

Цитата:
Уберите пожалуйста лог с форума, если вам не трудно.  

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

Цитата:
если писать правило, то срабатывает. А если добавить каталог то нет, выше примеры с готовой CMS

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


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:35 21-03-2009
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да все пути преобразуются.
 
Нет я про ваш лог говорю, не хочу что бы он был в общем доступе.
 
Вот пример, C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif -> jabber/images/logos/logo_web_2_2.gif Не верный запрос, C:/Program Files/VertrigoServ/www/images/logos/logo_web_2_2.gif -> /images/logos/logo_web_2_2.gif Должно быть.
 
Я в ЧПУ прописал каталог jabber в данном случаи, и все запросы пошли на него.

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 22:38 21-03-2009 | Исправлено: usertum, 22:40 21-03-2009
Cheery



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

Цитата:
Вот пример, C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif -> jabber/images/logos/logo_web_2_2.gif Не верный запрос

но он не имеет никакого отношения к тому правилу, что вы привели
 
 

Цитата:
Нет я про ваш лог говорю.  

какая разница то есть он или нет? ничего секретного он не открывает
а за порчу пред. постов можно и предупреждение схлопотать
 
 

Цитата:
Я в ЧПУ прописал каталог jabber в данном случаи, и все запросы пошли на него.

ну, идут.. как первоначальный запрос браузера выглядит ? (URL картинки logo_web_2_2.gif к которой обращается браузер)


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:48 21-03-2009 | Исправлено: Cheery, 22:52 21-03-2009
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это тест на cms "Antislaedcms",  
Было прописано правило RewriteRule ^jabber/create.html$ http://127.0.0.1/index.php?name=Jabber [L]
 
И все запросы пошли на /jabber/
 
какая разница то есть он или нет? ничего секретного он не открывает - он открывает пути, часть структуры скрипта. Зачем он шас тут?
 
Добавлено:
А каталога jabber нет, и путей таких тоже нет. Я не хочу все преобразовать на данный каталог!

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 22:55 21-03-2009
Cheery



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

Цитата:
ничего секретного он не открывает - он открывает пути, часть структуры скрипта. Зачем он шас тут?

не смешите..
 

Цитата:
И все запросы пошли на /jabber/

еще раз.. как в html выглядит путь к картинке

Цитата:
logo_web_2_2.gif

 
 

Цитата:
А каталога jabber нет, и путей таких тоже нет. Я не хочу все преобразовать на данный каталог!

вот с этого и надо все начинать.. читайте посты в теме ранее - браузер не знает всех ваших внутренних преобразований
либо преобразуете так и все пути, либо указываете пути к картинкам правильные.. без jabber
 
поэтому и спросил - как выглядят пути к картинкам в сгенерированной странице.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:58 21-03-2009 | Исправлено: Cheery, 23:01 21-03-2009
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Выглядит так: http://127.0.0.1/images/logos/logo_web_2_2.gif

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 23:03 21-03-2009
Cheery



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

Цитата:
Выглядит так

если честно, то не верю..

Цитата:
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] add path info postfix: C:/Program Files/VertrigoServ/www/jabber -> C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif  

говорит как раз о том, что в картинках путь идет либо как
/jabber/images....
либо проблема из за того, что указываете переброс как http://127.0.0.1, то есть в корневую директорию того же сервера и происходит наложение путей.
 
так нужно? чем хуже вот так?
RewriteRule ^jabber/create.html$    /index.php?name=Jabber [L]

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:16 21-03-2009
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RewriteRule ^jabber/create.html$    /index.php?name=Jabber [L]  
 
Так работает, но путь на картинки теряется...

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 23:18 21-03-2009
Cheery



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

Цитата:
Так работает, но путь на картинки теряется...

какой? ну сами подумайте - зачем вам путь 127.0.0.1 на картинки?  
или что значит "теряется"?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:20 21-03-2009
usertum



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

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 23:24 21-03-2009 | Исправлено: usertum, 23:31 21-03-2009
Cheery



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

Цитата:
Вот:  

я же сказал - указывайте полный путь от корня сайта  
не
<img src="images/logos/logo_web_2_2.gif" border="0" alt="SLAED CMS">
а
<img src="/images/logos/logo_web_2_2.gif" border="0" alt="SLAED CMS">
или пропишите в странице в head base tag:
<base href="/" />
ессно же ваш браузер будет запрашивать картинки как
/jabber/images/logos/logo_web_2_2.gif
при первоначальной записи
 
можете добавить строчку для картинок, если хотите
то есть  
RewriteRule ^jabber/(.*\.gif)$  /$1
что то такое

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:28 21-03-2009 | Исправлено: Cheery, 23:30 21-03-2009
Afin



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, есть проблема.
Есть на сайте папка /folder/
В ней будут хранится другие папки, по папке на пользователя.
Т.е. /folder/user1/
/folder/user2/
 
И тд.
 
Нужно сделать так, чтобы заполнив на основном сайте логин и пароль, пользователь получал доступ к своей папке (данные о папке пользователя берутся из бд). Извне папки должны быть недоступны никому, крому этого залогиненного пользователя.
Использовать .htpasswd нельзя, потому что нужно конкретно чтобы пользователь логинился через мою форму на сайте.
 
Пока всё что получилось это сделать следующее:
в каждой папке /folder/userX/ лежит файл .htaccess со следующим содержанием:
 
    код
 
    RewriteEngine On
    Options -Indexes
    DirectoryIndex get.php
    RewriteRule ^get.php?file=$1?$ get.php?file=$1 [L]
    RewriteRule ^([^/]+)?$ get.php [L]
 
 
И также лежит php скрипт get.php, который по сути нужен для того, чтобы проверить сессию пользователя,и если все в порядке, показать нужный файл в браузере (обычно файлы это html странички).
 
Проблема в том, что если папке /folder/userX/ есть другие папки, например:
 
/folder/userX/index.html
/folder/userX/css/
 
То можно спокойно просмотреть файл /folder/userX/css/main.css
извне, не будучи залогиненым.
 
Никак не придумаю, как правильно решить эту проблему.
 
По сути мне нужно чтобы все запросы которые идут не от get.php блокировались
 
Применение следующее:
в папку /userX/ кидается например сверстанный сайт в html
пользователь может глянуть на файл /userX/index.html через get.php?file=index.html
При этом все css файлы подхватываются и не блокируются, потому что идет запрос от get.php
 
Реально ли это вообще сделать ? Уже вторые сутки мучаюсь...
 
Заранее спасибо
 
P.S. Пожалуйста, не надо отправлять меня на доки и тд. Если бы я что-нибудь нашел там, не писалы бы сюда.

Всего записей: 23 | Зарегистр. 07-09-2004 | Отправлено: 04:39 10-04-2009
Cheery



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

Цитата:
По сути мне нужно чтобы все запросы которые идут не от get.php блокировались  

ну так и направляете все запросы на этот скрипт

Цитата:
RewriteCond %{REQUEST_URI}  !^/get.php
RewriteRule ^(.*)$ get.php?file=$1 [L]

что то такое

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:57 10-04-2009 | Исправлено: Cheery, 04:57 10-04-2009
Afin



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попробовал то что посоветовали. Работает частично.
 
допустим есть структура
/folder/user/index.html
/folder/user/css/main.css
 
через get.php?file=index.html получается открыть index.html но стили не подхватываются (видимо блокируются...)
 
притом что get.php?file=css/main.css работает нормально, показывает css файл
 
Как сделать чтобы get.php?file=index.html смог брать файлы которые требуются для index.html ?

Всего записей: 23 | Зарегистр. 07-09-2004 | Отправлено: 14:49 10-04-2009
Cheery



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

Цитата:
но стили не подхватываются (видимо блокируются...)  

ну так проверяйте как выглядят пути к ним. возможно ваш get.php неправильно их интерпретирует.
и вообще - зачем еще и статику гнать через скрипт?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:17 10-04-2009
booro

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как преобразовать ссылки вида /catalog.html?page=shop.browse&category_id=43 в /catalog/category=43
 
RewriteRule ^catalog.html?page=shop.browse&category_id=([0-9]+)$ /catalog/category=$1 [L] ничего не дает.

Всего записей: 17 | Зарегистр. 22-05-2008 | Отправлено: 15:55 13-04-2009
Открыть новую тему     Написать ответ в эту тему

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