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

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

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

Цитата:
 При написании адреса без "php", переход на неё осуществляется нормально и расширение не отображается в адресной строке, НО, при следующем переходе на сайте по ссылке, например сайт.ru/browse.php, расширение уже прописывается.  

Боюсь, вам придется во всех шаблонах у всех ссылок убрать расширение php
 

Цитата:
И по поводу моего первого вопроса я так и не понял, возможно ли сделать такое средствами реврайта?

Можете попробовать такую конструкцию:

Код:
RewriteEngine On  
RewriteCond %{REQUEST_FILENAME}.htm -f
RewriteRule ^(.*)$ $1.htm [NS,L]  
 
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [NS,L]  
 
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NS,L]  

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 17:28 11-04-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dacuan
Отттак всё работает ))) Большое спасибо за помощь вам! Если расширения не убрать, но и хрен с ними.

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 17:51 11-04-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dacuan
Уважаемый!
Вот решил поделиться тем, что человек мне ответил на другом ресурсе по поводу моего второго вопроса. Я именно это имел в виду. Думаю вы просто не поняли мой вопрос, а я возможно в свою очередь не корректно его задал.    
 
 

Цитата:
 
Через внешний редирект, поэтому как можно выше.
 

Код:
 
RewriteCond %{THE_REQUEST} \.(?:php|html?)[\?\ ]
RewriteRule ^/?(.+)\.(?:php|html?)$ http://%{HTTP_HOST}/$1 [R,L]
 

 
Это лишняя нагрузка. Можно без RewriteCond, но с флагами END на правилах выше (только последние версии апача).
 

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 09:06 12-04-2012
Cheery



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

Цитата:
Вот решил поделиться тем, что человек мне ответил на другом ресурсе по поводу моего второго вопроса.

 
ну вы хотите, чтобы у вас все ссылки были с .php, и при каждом запросе делать редирект на адрес без расширения, да еще и 302?
 
подобные вещи надо на крайний случай делать.
я в своем движке реализовал работу без расширений, но у меня помимо переадресации ссылки с расширением на ссылку без нее (при этом я сделал и проверку существования файла), движок загоняет в буфер html код страницы, а потом обрабатывает его корректируя ссылки.  
 
кстати, у вас возникнет в этой ситуации проблема с POST данными - они просто потеряются при переадресации.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:14 12-04-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Тогда уберём.  
 
Добавлено:
Ну в принципе же, проект у меня только на стартовом этапе, пока маленькая база, мало файлов. Может и мне реализовать работу без расширений? Знать бы только как это сделать корректно и не в ущерб чему-либо...

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 09:32 12-04-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста директиву редиректа только для тех IP, которые запрещены правилом deny IP. Error 403 не подходит.

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 09:04 15-04-2012 | Исправлено: Laterport, 09:05 15-04-2012
Cheery



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

Цитата:
директиву редиректа только для тех IP, которые запрещены правилом deny IP

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

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

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Приветствую. Хорошо, с помощью mod_rewrite возможно такое осуществить? Просто если у меня забанен на сайте  IP диапазон определённой страны, я хочу чтобы они перенаправлялись на страницу 1.html, а забаненые по другой причине, на 2.html и т.д.  

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 09:12 15-04-2012
Cheery



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

Цитата:
IP диапазон

слишком муторно это делать через mod_rewrite
http://www.webmasterworld.com/forum92/4938.htm
хотя.. через RewriteMap (но там список IP, можно что то придумать, но стоит ли)
http://objectmix.com/apache/673610-block-ip-range-mod_rewrite.html


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:20 15-04-2012 | Исправлено: Cheery, 09:29 15-04-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Ok, спасибо.

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 09:33 15-04-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите пожалуйста, является ли такой редирект на https нормальным или есть более лучший способ?
 

Код:
 
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

 

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 12:33 22-04-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как сделать чтобы при таком коде
 

Код:
 
RewriteRule ^PRIMER$ browse.php [L]
 
 
 
в адресной строке отображалось именно PRIMER.  
 
Подскажите пожалуйста код для конкретного примера и глобальный, чтобы распространялся на всё на сервере.

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 07:38 25-04-2012
Cheery



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

Цитата:
есть более лучший способ?  

в чем он может быть лучше?
 

Цитата:
в адресной строке отображалось именно PRIMER.

а у вас что отображается?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 07:44 25-04-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
 Выразился не верно. Имел в виду правильный ли способ редиректа или несёт за собой что-то не очень хорошее.  
 По поводу второго вопроса. Если руками в браузере забиваешь http://site.ru/primer то отображается именно так. Если откуда-нибудь переходишь по ссылке http://site.ru/primer то отображается http://site.ru/browse.php

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 09:13 25-04-2012 | Исправлено: Laterport, 09:16 25-04-2012
Cheery



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

Цитата:
Если руками в браузере забиваешь http://site.ru/primer то отображается именно так. Если откуда-нибудь переходишь по ссылке http://site.ru/primer то отображается http://site.ru/browse.php

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

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:17 25-04-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Посмотрите пожалуйста в чём может быть дело:
 

Код:
 
AddDefaultCharset UTF-8
Options All -Indexes
AddType "text/html; charset=UTF-8" .html .htm .shtml
 
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
 
###########MOD_REWRITE###################
 
RewriteEngine On    
RewriteRule ^primer$ browse.php [L]
 
RewriteCond %{HTTPS} =off
RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
 
RewriteCond %{REQUEST_FILENAME}.htm -f  
RewriteRule ^(.*)$ $0.htm [NS,L]  
 
RewriteCond %{REQUEST_FILENAME}.html -f  
RewriteRule ^(.*)$ $0.html [NS,L]  
 
RewriteCond %{REQUEST_FILENAME}.php -f  
RewriteRule ^(.*)$ $0.php [NS,L]
 
ErrorDocument 500 http://site.ru/error500
RewriteRule ^(error500.*) error500.html
 
#######################################
 

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 09:47 25-04-2012
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите преобразовать URL с
http://site/index?page=2&ts=0
в
http://site/page=2&ts=0
или в
http://site/page/2/ts/0

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 15:21 25-04-2012
dacuan

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

Код:
RewriteRule ^page/([0-9]+)/ts/([0-9]+)$ index?page=$1&ts=$2 [NS,L]

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 16:01 25-04-2012
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dacuan
У меня всёвремя пишет "Internal Server Error"

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 19:19 25-04-2012
Cheery



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

Цитата:
У меня всёвремя пишет "Internal Server Error"

смотрите лог ошибок сервера.  
Может у вас запрещено вообще использовать правила, ну или в них ошибка.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:21 25-04-2012
Открыть новую тему     Написать ответ в эту тему

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