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

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



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

Цитата:
в смысле? сверху вниз.  

ясно, практически как правила фаервола)
===
тока что заметил, ошибка
Цитата:
Reason: DNS lookup failure for: index.php.domen.tk

сохраняется, если стучаться снаружи..
унутре всё хорошо..
и с днс-ом, кстати, тоже всё как надо (он у меня как сплит-днс, снаружи - одно, снутре - другое)
ищу багу..

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



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

Цитата:
сохраняется, если стучаться снаружи..  

потому что перебрасывает /index.php, логично же

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

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



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

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



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

Цитата:
дык а снутре почему не перебрасывает?

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


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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
есть такое условие:
 
RewriteCond install/index.php -f
RewriteRule ^install/(.*)$ install/index.php?r=$1 [L]
 
но RewriteCond не проходит, потому что проверяемый на существование файл лежит в %{DOCUMENT_ROOT}RewriteBaseinstall/index.php
 
собственно вопрос - как исхитриться составить работающее условие для RewriteCond?

Всего записей: 314 | Зарегистр. 03-09-2006 | Отправлено: 00:26 12-01-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
prestigo
я же вам ответил в той теме.
RewriteCond %{DOCUMENT_ROOT}/RewriteBaseinstall/%{REQUEST_URI} -f

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:29 12-01-2014
prestigo

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

Цитата:
я же вам ответил в той теме.
RewriteCond %{DOCUMENT_ROOT}/RewriteBaseinstall/%{REQUEST_URI} -f

 
вы закрыли тему и не дали возможность прокомментировать
 
нет, не то
нужно как-то подставить значение RewriteBase в правило RewriteCond
т.е. иначе говоря проверить существование файла
/home/maestro/Документы/Programs/web/base/cms_demo/public_html/install/index.php
при
%{DOCUMENT_ROOT} = /home/maestro/Документы/Programs/web/base/
и
RewriteBase  = /cms_demo/public_html/

Всего записей: 314 | Зарегистр. 03-09-2006 | Отправлено: 01:07 12-01-2014
Cheery



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

Цитата:
нет, не то

что значит "не то"?  
RewriteCond %{DOCUMENT_ROOT}/cms_demo/public_html/%{REQUEST_URI} -f
возможно нужно убрать кое где слэши, чтобы не получались двойные.


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:19 12-01-2014 | Исправлено: Cheery, 01:19 12-01-2014
prestigo

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

Цитата:
RewriteCond %{DOCUMENT_ROOT}/cms_demo/public_html/%{REQUEST_URI} -f  

 
/cms_demo/public_html/ УЖЕ находятся в RewriteBase
указывая его явно в условии для правила, мы дублируем сущности
т.е. его нужно как-то оттуда извлечь

Всего записей: 314 | Зарегистр. 03-09-2006 | Отправлено: 01:22 12-01-2014
Cheery



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

Цитата:
т.е. его нужно как-то оттуда извлечь  

вы проверяете файловую систему, а не URL
 
если хотите использовать переменные - есть модули для апача, позволяющие задавать и использовать переменные.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:27 12-01-2014
prestigo

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

Цитата:
вы проверяете файловую систему, а не URL
 
если хотите использовать переменные - есть модули для апача, позволяющие задавать и использовать переменные

 
URL в данном условии мне не интересен в принципе - я проверяю только наличие определенного файла в определенном каталоге
 
чуть выше я уже задал перменную - это RewriteBase  
возможно ли как-то воспользоваться им явно в условиях для правила?

Всего записей: 314 | Зарегистр. 03-09-2006 | Отправлено: 01:34 12-01-2014
Cheery



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

Цитата:
возможно ли как-то воспользоваться им явно в условиях для правила?

нет.
 

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

я вам поясняю разницу.. RewriteBase оперирует с URL, проверка файла - с файловой системой. То, что у вас совпадает, хорошо, но, в принципе, нет такой задачи - получение в htaccess значения RewriteBase.
 
если есть необходимость сокращать все это - сказал насчет переменных. определяете и потом используете ее всюду, где хочется в конфиге.
 
ну или генерите .htaccess не вручную, если вам приходится его создавать и править больше, чем один раз.
 
ps: кстати http://www.zeilenwechsel.de/it/articles/8/Using-mod_rewrite-in-.htaccess-files-without-knowing-the-RewriteBase.html

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:37 12-01-2014 | Исправлено: Cheery, 01:39 12-01-2014
prestigo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
спасибо
 
у меня вот еще какой вопрос - что первично, логгирование запроса апачем в acces.log или обработка его с помощью mod_rewrite и логгирование в RewriteLog?

Всего записей: 314 | Зарегистр. 03-09-2006 | Отправлено: 19:12 12-01-2014
Cheery



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

Цитата:
что первично, логгирование запроса апачем в acces.log или обработка его с помощью mod_rewrite и логгирование в RewriteLog?

не совсем понимаю о чем вы.. access.log не записывает конечный результат обратки rewrite (только если поставили явную переадресацию на новый запрос).
он пишет то, что получил от браузера.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:27 12-01-2014
phpbbmods

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые!
Это снова я
 
суть проблемы следующее Apache/2.2.15 (CentOS)
mod_rewrite отказывается обрабатывать страницы с URL где есть слово error  
 
плиз кто знает и сталкивался что прописать в php.ini
или через .htaccess
 
или это глобальное всего сервака?
заранее благодарю!

Всего записей: 322 | Зарегистр. 09-02-2004 | Отправлено: 10:42 02-02-2014
Cheery



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

Цитата:
mod_rewrite отказывается обрабатывать страницы с URL где есть слово error  
 

почему так решили и в чем это выражается?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:45 02-02-2014
phpbbmods

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
спасибо за ответ
просто набираем в строке браузера например /error/403/
 
видим
 
Not Found
The requested URL /error/403/ was not found on this server.
Apache/2.2.15 (CentOS) Server at www домен Port 80
 
хотя все остальные страницы работают корректно но там где есть error  
пустая страница Not Found  
 
создание реальных страниц к сожалению нечему не привели.

Всего записей: 322 | Зарегистр. 09-02-2004 | Отправлено: 10:53 02-02-2014 | Исправлено: phpbbmods, 10:56 02-02-2014
Cheery



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

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:47 03-02-2014
phpbbmods

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

Всего записей: 322 | Зарегистр. 09-02-2004 | Отправлено: 12:32 03-02-2014
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
что то не могу врубиться, есть следующая проблема.
Есть сайт на joomla, и 3 домена в разных зонах, один домен - site.de - главный, есть еще site.com и site.gr -  
последний соот-но в Греции у греческого регистратора.
Хозяин доменов попросил сделать редиректы со всех на de -c com проблемы нет, сделал в панели домена, а в Греции они сами делали когда-то давно, при этом понаписали так, чтобы перебрасывало сразу же на то место, где версия с греческим языком была.  
Теперь сайт новый, сами они в Греции разобраться не могут, и редирект с www.site.gr ведет на несуществующий адрес - www.site.de/main.php?seite=1&sprache=2
Теперь что то туплю, как сделать редирект с этого несуществующего урла просто в корень? На другой домен получается, а в корень того же почему-то не происходит редиректа, видимо, что то не так делаю...

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 10:44 13-02-2014
Открыть новую тему     Написать ответ в эту тему

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