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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
 
они это infobox.ru
А речь о том что поддержка хостинга infobox.ru  
Говорит что у нас на сайте при посещении всего 25 000 человек в сутки большая нагрузка на сервер и infobox.ru указывает на файл в логах - error_log
Вот выше в посте я и привел запись с этого файла.
 

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

 
Вот я и подумал может у меня что то не правильно именно в .htaccess

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



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

Цитата:
Вот выше в посте я и привел запись с этого файла.

вы же не первоначальную запись привели? это не ошибка, пока что..
ошибка будет звучать что то вида
[Mon Jan 24 10:47:59 2005] [error] [client 192.168.2.101] Request
exceeded the limit of 10 internal redirects due to probable
configuration error. Use 'LimitinternalRecursion' to increase the limit
if necessary. Use 'LogLevel debug' to get a backtrace.

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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
файл .ru_error_log - 19.5 MB
 
да онЯ не понимаю что в нем если тот код что я привел первом посте не ошибка зачем он тогда вообще пишется?
 
и почти все такие а вот пару штук есть таких

Код:
 
[Thu Jun 25 00:34:09 2009] [info] [client IP] (32)Broken pipe: client stopped connection before send body completed
 

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

Код:
 
[Thu Jun 25 04:39:37 2009] [error] [client IP] File does not exist: /home/www/z/htdocs/i/w/a/1.jpg
 

 
/home/www/z/htdocs/i/w/a/1.jpg - Не существует картинки
 
Просто я не могу понять их направление меня в это файл что именно я там должен был увидеть что может влиять на работу хостинга вот!
 
Просто я понимаю и говорил с ними то 40 000 – 50 000 человек в сутки это уже надо брать сервак,
Но пока то работает же с тормозами правда, правда помню случаи когда на обычном тарифе было и 50 000 человек.
Заранее благодарю!

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



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

Цитата:
[Thu Jun 25 00:34:09 2009] [info] [client IP] (32)Broken pipe: client stopped connection before send body completed  

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

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

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

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

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

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

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

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





Нет, просто валим с форума со своим спамом /Cheery/

Всего записей: 2 | Зарегистр. 27-06-2009 | Отправлено: 22:26 27-06-2009 | Исправлено: Cheery, 00:10 28-06-2009
Neuromancer



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ребят, возникла такая проблема:
Есть сайт на хостинге site.ru, домен 2 уровня. Привязал к хостеру второй домен domain2.ru и положил второй сайт в папку domain2, т.е., второй сайт теперь доступен по адресу site.ru/domain2. Нужно сделать так, чтобы второй сайт заработал по адресу domain2.ru
 
По FAQ у хостера сделал следующее (для domain2.ru и www.domain2.ru):
 

Код:
 
RewriteEngine On
Options +FollowSymlinks
 
RewriteCond %{ENV:REDIRECT_MYFLAG} ^$
RewriteCond %{HTTP_HOST} ^domain2\.ru$
RewriteRule ^(.+) %{HTTP_HOST}$1 [E=MYFLAG:1]
RewriteRule ^domain2\.ru(.*) /domain2/%{REQUEST_URI} [L]
 
 
RewriteCond %{ENV:REDIRECT_MYFLAG} ^$
RewriteCond %{HTTP_HOST} ^www\.domain2\.ru$
RewriteRule ^(.+) %{HTTP_HOST}$1 [E=MYFLAG:1]
RewriteRule ^www\.domain2\.ru(.*) /domain2/%{REQUEST_URI} [L]
 

 
Работает, но содержимое подпапок второго сайта недоступно, например domain2.ru/images/pic.jpg уже не откроется.
Где я ошибся?

Всего записей: 542 | Зарегистр. 08-04-2002 | Отправлено: 08:09 09-07-2009 | Исправлено: Neuromancer, 08:09 09-07-2009
dacuan

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

Цитата:
Где я ошибся?

В выбранном подходе. Это делается не с помощью mod_rewrite, а виртуальными хостами.
 
 
Добавлено:
А вообще можно попробовать такое правило:

Код:
RewriteCond %{HTTP_HOST} ^domain2\.ru$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain2\.ru$  
RewriteRule ^(.*)$ domain2/$1  [L]


Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 11:23 09-07-2009
Neuromancer



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
К сожалению, хостер такую возможность в данном тарифном плане не дает, только mod_rewrite а менять тариф или хостера в данный момент смысла нет (по ряду соображений, больше минусов, чем плюсов).
Кстати, я разобрался - тот вариант выше оказался рабочим, сразу не заработало, т.к. в .htaccess было еще несколько строк для устроения ЧПУ на основном сайте, из-за которых эту конструкцию заглючило. Исправилось переменой мест слагаемых.
 
Добавлено:

Цитата:
RewriteCond %{HTTP_HOST} ^domain2\.ru$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain2\.ru$  
RewriteRule ^(.*)$ domain2/$1  [L]  

Internal Server Error

Всего записей: 542 | Зарегистр. 08-04-2002 | Отправлено: 11:28 09-07-2009
dacuan

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

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 11:38 09-07-2009
Neuromancer



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
Request exceeded the limit of 10 internal redirects due to probable configuration error.

Всего записей: 542 | Зарегистр. 08-04-2002 | Отправлено: 11:40 09-07-2009
dacuan

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

Код:
RewriteCond %{REQUEST_URI} !^domain2/
RewriteCond %{HTTP_HOST} ^domain2\.ru$ [OR]  
RewriteCond %{HTTP_HOST} ^www\.domain2\.ru$    
RewriteRule ^(.*)$ domain2/$1  [L]  

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 11:44 09-07-2009
Neuromancer



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

Цитата:
RewriteCond %{REQUEST_URI} !^domain2/
RewriteCond %{HTTP_HOST} ^domain2\.ru$ [OR]  
RewriteCond %{HTTP_HOST} ^www\.domain2\.ru$    
RewriteRule ^(.*)$ domain2/$1  [L]  

Тот же результат, к сожалению.

Всего записей: 542 | Зарегистр. 08-04-2002 | Отправлено: 12:19 09-07-2009
dacuan

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

Код:
RewriteCond %{REQUEST_URI} !^/domain2/
RewriteCond %{HTTP_HOST} ^domain2\.ru$ [OR]  
RewriteCond %{HTTP_HOST} ^www\.domain2\.ru$    
RewriteRule ^(.*)$ domain2/$1  [L]  

Ошибка была в одном символе (выделил его красным)

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 12:35 09-07-2009
Neuromancer



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
А вот это прекрасно сработало и гораздо элегантнее, чем мой вариант. Спасибо

Всего записей: 542 | Зарегистр. 08-04-2002 | Отправлено: 12:43 09-07-2009
chupurnov

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Граблю один диллерский сайт. Все ссылки тоже перебиваю чтобы шли через мой сайт.  
Все работает если ссылка имеет вид:  
 
 www.site.ru/wps/Honda_OEM/HondaATV.asp  
все что идет после .ru это с забугорного сайта  
 
для  нее у меня в .htaccess есть строчка  
RewriteRule ^wps/([a-zA-Z0-9_/\.]+)$ index.php?dn=mycab&to=mikrofisha&mkh=1&$1 [NC]  
 
Вот если ссылка имеет вид:  
 
http://www.site.ru/wps/Honda_OEM/HondaATV.asp?Type=11&pf=1  
 
и в .htaccess соответственно  
 
RewriteRule ^wps/([a-zA-Z0-9_/\.\?\&=]+)&pf=1$ index.php?dn=mycab&to=mikrofisha&pf=1&mkh=1&$1 [NC]  
 
то соответствие не находится и все падает в следующее выражение хотя    
проверил эту регулярку в RegexBuddy все правильно переделывает, проблема единственно в знаке ? в начальной ссылке, если без него то все работает

Всего записей: 29 | Зарегистр. 08-07-2009 | Отправлено: 02:39 10-07-2009
Cheery



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

Цитата:
то соответствие не находится и все падает в следующее выражение хотя    
проверил эту регулярку в RegexBuddy все правильно переделывает, проблема единственно в знаке ? в начальной ссылке, если без него то все работает

не находится, потому что аргументы запроса там не проверяются.
для них нужно писать отдельный  
RewriteCond %{QUERY_STRING}  тут_регулярка


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:58 10-07-2009
chupurnov

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если место:
^wps/([a-zA-Z0-9_/\.\?\&=]+)&pf=1$
создать такое правило:
^wps/([a-zA-Z0-9_/\.\?\&=]+)$
то выражение подходит.
Хотя входящий запрос выглядит как
http://www.site.ru/wps/Honda_OEM/HondaATV.asp?Type=11&pf=1  

Всего записей: 29 | Зарегистр. 08-07-2009 | Отправлено: 12:54 10-07-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
chupurnov
вы читаете, что вам было выше сказано?
rewriterule не обрабатывает аргументы запроса!

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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^!(cgi-bin.*)$ http://www.site.ru/$1 [R=301,L]
 
Есть такая запись в .htaccess. Задача исключить из редиректа папку cgi-bin.
Но не работает, и не известно работала ли вообще

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