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

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



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
mod_dir, вроде у меня включён. На существующие папки у меня / добавляется автоматом. А так как я перезаписываю mod_rewrite-ом, то папок в URL не существует.
 
.htaccess у меня примерно такой (сделал в виде таблицы для наглядности)
1 RewriteRule ^([A-Za-z_]+)/$ index.php?dir1=$1 #папка/    
2 RewriteRule ^([A-Za-z_]+)/([A-Za-z_]+)$ index.php?dir1=$1&file=$2 #папка/файл    
3 RewriteRule ^([A-Za-z_]+)/([A-Za-z_]+)/$ index.php?dir1=$1&dir2=$2 #папка/папка/    

На запрос httр://домен/папка/папка срабатывает правило №2. Но у меня такого URL нет, вылетает ошибка 404.
Так вот мне нужно, чтобы в таком случае, если не помогает правило №2, добавить / и попробовать правило №3.
 
Возможно ли это делать сделать правилами .htaccess, или в самом index.php пытаться отслеживать такие ситуации?

Всего записей: 614 | Зарегистр. 16-10-2007 | Отправлено: 04:27 05-06-2009 | Исправлено: wyxa, 04:30 05-06-2009
Cheery



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

Цитата:
или в самом index.php пытаться отслеживать такие ситуации?

в нем..  у вас же фактические папки не по пути запроса расположены?  
как сервер может узнать есть она или нет?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:30 05-06-2009
wyxa



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Ясно, спасибо!
А ещё такой вопрос. Мне нужно редиректом перенаправлять ссылки httр://домен/ru на httр://домен/ru/. Аналогично с en.
 
У меня правило:
RewriteRule    ^/(ru|en)$    /$1/    [R=301]
Почему оно не работает?
 
Ну, я ещё пытался так:
RewriteRule ^http://localhost/(ru|en)$    http://localhost/$1/ [R=301]
Тоже не пашет.

Всего записей: 614 | Зарегистр. 16-10-2007 | Отправлено: 04:55 05-06-2009 | Исправлено: wyxa, 04:57 05-06-2009
Cheery



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

Цитата:
Тоже не пашет.

а с чего оно должно "пахать", если http и так далее туда не передается?

Цитата:
RewriteRule    ^/(ru|en)$    /$1/    [R=301]

уверены, что до него вообще доходит выполнение? включите на время логгирование и посмотрите
и попробуйте без /
RewriteRule    ^(ru|en)$    /$1/    [R=301]

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

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



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поискал в инете, нашёл такую конструкцию:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [L,R=301]
 
Насколько я понимаю, первое условие проверяет наличие файла, если его нет, то добавляет / и затем перезаписывает. Если это не так, поправьте меня.
 
Добавлено:
Cheery
Нет,  
RewriteRule    ^(ru|en)$    /$1/    [R=301]
тоже не работает. Вылетает ошибка 404.
А с кодом выше вроде всё хорошо.

Всего записей: 614 | Зарегистр. 16-10-2007 | Отправлено: 05:09 05-06-2009
Cheery



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

Цитата:
Насколько я понимаю, первое условие проверяет наличие файла, если его нет, то добавляет / и затем перезаписывает

я же сказал - у вас пути, к которым идет запрос, физически существуют там же или информация берется в index.php откуда то?  


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 05:12 05-06-2009
wyxa



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Физически пути не существуют. Всё виртуально. Есть только index.php.
/папка1/папка2/файл
преобразовывается в
/index.php?dir1=папка1&dir2=папка2&file=файл
и т. п. и информация берётся из базы.

Всего записей: 614 | Зарегистр. 16-10-2007 | Отправлено: 05:19 05-06-2009
Cheery



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

Цитата:
Физически пути не существуют. Всё виртуально.

тогда каким образом в htaccess определится есть ли файл, который обрабатывается с помощью index.php?  
поэтому передавайте что хочется в index.php, а уже там решайте как и куда отредиректить в случае чего.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 05:22 05-06-2009 | Исправлено: Cheery, 05:29 05-06-2009
wyxa



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

Цитата:
тогда каким образом в htaccess определится есть ли файл, который обрабатывается с помощью index.php?

Я понял вашу мысль.
Дело в том, что виртуальных папок первого уровня (httр://домен/папка1/) у меня ограниченное количество: только /ru/ и /en/. Я их обрабатываю в самом htaccess. Если запрашивается что-то другое, то вылетает ошибка 404. Аналогично с файлами httр://домен/файл и httр://домен/папка1/файл. В данном случае я лишь добился того, чтобы не было ошибки 404.
В остальных ситуациях, конечно, только через index.php.
 
Спасибо!
 
Добавлено:
 
Можно ли при помощи mod_rewrite сделать следующее преобразование:
по запросу
httр://домен/папка/
изменить регистр первой буквы «папки»:
httр://домен/Папка/
 
?
 
Примеры:
http://домен/gallery/ преобразовывается в http://домен/Gallery/    
http://домен/gallery/pics/ преобразовывается в http://домен/Gallery/Pics/

т. е. взять URL и изменить регистр каждой буквы после / (кроме самого домена).

Всего записей: 614 | Зарегистр. 16-10-2007 | Отправлено: 05:32 05-06-2009 | Исправлено: wyxa, 06:30 05-06-2009
DrakonSoft



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Надод, помогите плиз.
 
Все файлы, находящиеся в application брать из папки application,
 
при запросе файла из image/ отдавать файл из sites/хост/image
при запросе файла из media/ отдавать файл из sites/хост/media
 
Все остальные запросы передавать на move.php
 
Написал в .htaccess следующее.
 
RewriteRule ^application/(.*)$ application/$1 [L]
RewriteRule ^image/(.*)$ sites/%{HTTP_HOST}/image/$1 [L]
RewriteRule ^media/(.*)$ sites/%{HTTP_HOST}/media/$1 [L]
 
RewriteRule ^(.*)$ move.php [QSA]
 
Он при любом запросе (кроме application) все равно все передает на move.php
помогите решить проблему, плиз

Всего записей: 6 | Зарегистр. 18-08-2004 | Отправлено: 19:15 20-06-2009
Cheery



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

Цитата:
т. е. взять URL и изменить регистр каждой буквы после / (кроме самого домена).

можно.. регулярные выражение, вообще то, регистрозависимы
только если указать потом [NC] сделает их независимыми
 
DrakonSoft

Цитата:
Он при любом запросе (кроме application) все равно все передает на move.php  

.htaccess где расположен? в
Цитата:
sites/хост/image  
тоже?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:44 20-06-2009
DrakonSoft



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
то Cheery
.htaccess один, в корне документ рута
 
Нужно преобразовывать "красивые" урлы в реальные, с учетом домена. (мультисайтовая система)

Всего записей: 6 | Зарегистр. 18-08-2004 | Отправлено: 23:29 20-06-2009 | Исправлено: DrakonSoft, 23:35 20-06-2009
Cheery



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

Цитата:
Нужно преобразовывать "красивые" урлы в реальные, с учетом домена. (мультисайтовая система)

да это то понятно.. простой совет для таких случаев - включите на время логгирование mod_rewrite обработки.. и посмотрите
наверняка проблема в чем то простом (устал и не очень сейчас думается )

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

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



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А можно подскозать, как включить логирование? Я понимаю, нубский вопрос Но никогда логирование не включал

Всего записей: 6 | Зарегистр. 18-08-2004 | Отправлено: 23:55 20-06-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonSoft
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritelog
и ниже..
но только на время на 6 или выше уровне.

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

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



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
to Cheery
 
Преогромное спасибо!!!

Всего записей: 6 | Зарегистр. 18-08-2004 | Отправлено: 23:59 20-06-2009
phpbbmods

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Уважаемые!  может, кто сможет подсказать, что означает данный лог

Код:
 
[Thu Jun 25 00:00:39 2009] [debug] mod_rewrite.c(1643): [client 00.000.000.000] mod_rewrite's internal redirect status: 0/10.
 

00.000.000.000 – разные IP
Заранее благодарю!

Всего записей: 322 | Зарегистр. 09-02-2004 | Отправлено: 09:16 25-06-2009
Cheery



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

Цитата:
может, кто сможет подсказать, что означает данный лог

означает, что пока ни одного внутреннего редиректа не произошло

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:29 25-06-2009
phpbbmods

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Спасибки огромное,
Но странно вообще применяем mod_rewrite, там как положено на других серваках кроме infobox.ru подобного лога не замечали дак и само интересное то все работает ок а они на этот лог тычат.
 
.htaccess

Код:
 
DirectoryIndex index.php
 
ErrorDocument 404 /error/404/
ErrorDocument 403 /error/403/
ErrorDocument 401 /error/401/
 
<FilesMatch "(\.(pdf|rtf|zip|rar|doc|xls|csv|tar|tar.gz|bin|fdl|tbz))$">  
 Order deny,allow  
 Deny from all  
</FilesMatch>
 
RewriteEngine On
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$            /inc/index.php?url=$1 [L]
RewriteRule ^(.*)/(.*).html$  /inc/index.php?url=$1&p=$2 [L]
 

 
Я уж пересмотрел все вроде все в нем верно почему же тогда ошибка или чтото нето у меня в .htaccess ?
Заранее Благодарю!

Всего записей: 322 | Зарегистр. 09-02-2004 | Отправлено: 21:43 25-06-2009 | Исправлено: phpbbmods, 21:43 25-06-2009
Cheery



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

Цитата:
а они на этот лог тычат.

кто "они"?

Цитата:
 кроме infobox.ru подобного лога не замечали

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

Цитата:
Я уж пересмотрел все вроде все в нем верно почему же тогда ошибка или чтото нето у меня в .htaccess  

какая ошибка?? о чем речь вообще??  
не надо принимать нас за телепатов


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

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