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

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



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

Цитата:
Пользователь итак его не видит  

Оппа. Ваш случай работает и не видно лишнего В общем у меня в .htaccess много было лишнего и закомментировано. Почистил - и в моем варианте  перестало быть видно.
Да и у меня было http://www.www.com/index.php, а надо было сразу index.php

Цитата:
Имхо, так будет правильнее, короче и удобнее.

Спасибо. Я изначально разделял путь и имя файла, но думаю правильнее будет в скрипте это сделать.

Цитата:
Options +FollowSymlinks здесь не к месту

Могу только сказать "гы".
Спасибо, выручили. Все так просто, а я страдаю
 

Всего записей: 59 | Зарегистр. 18-08-2004 | Отправлено: 11:25 03-07-2006 | Исправлено: razawa, 11:30 03-07-2006
obla4ko4240019



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ребят, простенькая по идее задача, но разобраться не могу в htaccess.
надо чтобы ссылки типа http://site.com/?item=book1 заменялись на http://site.com/book1/ и http://site.com/?item=book1_6 на http://site.com/book1/06.html

Всего записей: 3275 | Зарегистр. 14-09-2005 | Отправлено: 12:23 03-07-2006
Pirates



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Простая проблема, но справиться с ней самостоятельно не выходит..
 
Дано: был сайт с кучей страниц с расширением .shtml. Я его перевел на .php и сразу вылезла проблема: во многих каталогах, на форумах, досках объявлений прописаны ссылки на конкретные страницы. Также сайт проиндекирован поисковиками, которые в результатах поиска выдают страницы .shtml, в результате пользователь видит 404.
 
Задача: при запросе файлов с расширением .shtml, .html, .htm выдавать файл с тем же именем, но с расширением .php. Как это сделать?
 
Следующая конструкция не работает:
 
RewriteEngine on
RewriteCond %{REQUEST_URI} \.shtml?$  
RewriteRule ^(.*)$ $1.php [L]  
RewriteEngine off

Всего записей: 104 | Зарегистр. 16-02-2004 | Отправлено: 13:10 04-07-2006
dacuan

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

Код:
 
RewriteEngine on  
RewriteCond %{REQUEST_URI} \.shtml?$  
RewriteRule ^(.*)\.shtml?$ $1.php [L]  
 

 
И в случае любых проблем с mod_rewrite в httpd.conf в описание хоста добавляешь строку RewriteLogLevel 9
и смотришь в файле логов, что не так происходит.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 13:28 04-07-2006
sTa1kEr



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

Цитата:
RewriteCond %{REQUEST_URI} \.shtml?$    

Под такое условие не будут поподатся .html и .htm. В данном случае наверное проще будет сделать следующим образом:

Код:
 
RewriteEngine on  
RewriteRule ^(.*)\.(shtml|html|htm)$ $1.php [L]    
 


Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 19:17 04-07-2006
Pirates



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

Код:
 
ErrorDocument 404 /index.php
 

Но это ведь не выход, правда? Может, в .htaccess еще что писать надо? У меня там сейчас только

Код:
 
RewriteEngine on
RewriteCond %{REQUEST_URI} \.shtml?$    
RewriteRule ^(.*)\.shtml?$ $1.php [L]  
RewriteEngine off
 


Всего записей: 104 | Зарегистр. 16-02-2004 | Отправлено: 20:35 04-07-2006 | Исправлено: Pirates, 20:38 04-07-2006
sTa1kEr



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

Цитата:
ErrorDocument 404 /index.php  

Так тебе надо что бы выводился index.php или
Цитата:
выдавать файл с тем же именем, но с расширением .php
?

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 20:47 04-07-2006
dacuan

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

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:12 05-07-2006
Pirates



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

Цитата:
Так тебе надо что бы выводился index.php

Нет, мне именно нужен вывод файла с тем же именем, но с расширением .php. ErrorDocument пока приходиться использовать, чтоб посетители не терялись.
 
dacuan

Цитата:
в случае любых проблем с mod_rewrite в httpd.conf  
...
Что видно с RewriteLogLevel 9?

К сожалению, httpd.conf не доступен для редактирования Саппорт хостера в дауне уже пару месяцев.

Всего записей: 104 | Зарегистр. 16-02-2004 | Отправлено: 14:47 06-07-2006
vii



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, кто может...
Есть два сайта. http://site1.com/ и http://site2.com/. Хочу использовать для 2-х сайтов один портальный движок. Движок сам обрабатывает URL и посему подставляет нужный контент. Если бы был свой Апач, то задача решалась бы тривиально. Я бы сделал один виртуалный сервер и создал бы ему серверАлиас. Тогда все запросы направлялись бы в одну директорию (но с разными URL), и дальше портал сам делал бы что нужно.
Но Апач чужой...
Можно ли через mod_rewrite преобразовывать http://site1.com/xyz/ в http://site2.com/xyz/ ? Перепробывал кучу вариантов. Получается либо банальный редирект (т.е. с заменой URL), либо вообще не работает.

Всего записей: 444 | Зарегистр. 21-10-2004 | Отправлено: 07:29 02-08-2006
DzOOMer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
совсем уже запутался:
есть адрес http://www.mysite.com/ - сайт на русском языке
для поддержки английского использую адрес http://www.mysite.com/en/
 
смысл в том, что скрипт (http://www.mysite.com/index.php) на оба языка один и работает (переключает язык/текст) по наличию в url строки /en
 
чтобы переадресовать все что идет на http://www.mysite.com/en/ в директории /en/ лежит
 
.htaccess
RewriteEngine on
RewriteRule ^(.*)$ /$1 [L]
 
и все нормально работает (index.php срабатывает переключаяс на en), кроме картинок и стилей css. (на домашнем хосте все работает отлично)
 
например картинка имеет адрес
http://www.mysite.com/skins/img/logo.gif - отображается ок
но при адресе
http://www.mysite.com/en/skins/img/logo.gif выдает ошибку:
404 Not Found
nginx/0.3.46

 
если знаете подскажите решение... как заставить отображать картинки
 
в общем я так понял, что все дело в nginx который статические файлы (в том числе и картинки) выдает сразуже, не пуская их до апача с модреврайтером. тупик...

Всего записей: 882 | Зарегистр. 16-11-2004 | Отправлено: 13:30 07-08-2006 | Исправлено: DzOOMer, 00:36 08-08-2006
Cheery



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

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

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

Цитата:
например картинка имеет адрес  
http://www.mysite.com/skins/img/logo.gif - отображается ок  
но при адресе  
http://www.mysite.com/en/skins/img/logo.gif выдает ошибку:  
404 Not Found  
nginx/0.3.46  

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

Цитата:
.htaccess  
RewriteEngine on  
RewriteRule ^(.*)$ /$1 [L]  
 
и все нормально работает (index.php срабатывает переключаяс на en), кроме картинок и стилей css. (на домашнем хосте все работает отлично)  

каким образом? не вижу RewriteCond

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:39 08-08-2006
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот возник такой вопрос,
 
Возможно ли учесть сколько раз было выполнено определенное правило в mod_rewrite? Типа у меня есть статический урл мне надо подсчитать кто и когда, сколько раз его юзал (кликал).
 
Спасибо за совет
 
п.с. Думал редиректить на РНР скрипт но тогда пользователь заметит что был редирект.

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 20:46 09-08-2006
edogs

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

Цитата:
Типа у меня есть статический урл мне надо подсчитать кто и когда, сколько раз его юзал (кликал).  

а логи апача?

Всего записей: 1777 | Зарегистр. 25-07-2004 | Отправлено: 02:47 10-08-2006
kaw

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
строка из офф. документации по Apache (mod_rewrite)
 
Example:
RewriteLog "/usr/local/var/apache/logs/rewrite.log"

Всего записей: 86 | Зарегистр. 06-08-2003 | Отправлено: 02:58 10-08-2006
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
edogs
По идее верно, но доступа к логам Апача на простом хостинге не дадут, кроме что если дедик взять.
 
kaw
Ок, думаю совет дельный и будет пригоден, если только в логах будет сохраняться полная информация а не просто сколько раз было выполнено данное преобразование.
 
Спасибо за советы, но по прежнему продолжаю принимать альтернативные советы
 
Добавлено:
kaw

Цитата:
RewriteLog "/usr/local/var/apache/logs/rewrite.log"

Оказалось что в моем случае это не подходит, сохраняется не та информация. Нет инфы referrer, IP, time а для меня первое самое главное. Получается продолжаем поиски

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 10:17 10-08-2006
sTa1kEr



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

Цитата:
По идее верно, но доступа к логам Апача на простом хостинге не дадут


Цитата:
RewriteLog "/usr/local/var/apache/logs/rewrite.log"  

Доступа к логам нету, а доступ к httpd.conf есть? Хм...

Цитата:
Думал редиректить на РНР скрипт но тогда пользователь заметит что был редирект.

RewriteMap

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 11:25 10-08-2006
Delphi6



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

Цитата:
Доступа к логам нету, а доступ к httpd.conf есть?

А почему вы решили что у меня есть доступ к httpd.conf? Я перечитал мои посты и кажется даже косвенно не касался данного файла, хотя возможно я не заметил
 
Ой блин, меня сейчас осенило Если происходит rewrite урла, то пользователь даже не видит что данный урл преобразуется в другой  
 
Значит делаем подмену урла:
http://mysite.com/send.cgi?file=game.zip  
 
на php скрипт
http://mysite.com/count.php  
 
и потом из самого файла count.php редиректим на реальный файл
http://mysite.com/files/game.zip
 
Пожалуйста проверьте правильны ли мои рассуждения?

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 12:34 10-08-2006
sTa1kEr



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

Цитата:
А почему вы решили что у меня есть доступ к httpd.conf?

Потому что,
RewriteLog
Цитата:
The directive should occur only once per server config.

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 12:48 10-08-2006
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что-то у меня не работает при выборе линка http://mysite.com/ru/send.cgi?file=game.zip не редиректит на http://mysite.com/count.php
 

Код:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_URI} ru/send.cgi?file=game.zip  
RewriteRule ^.*$ http://mysite.com/count.php

 
Добавлено:
sTa1kEr
Аааа, да просто до этого не дошел, я прочел что данная директива сохраняет, и мне уже не подошло
 
Добавлено:
Интерестно что с флагом [R] работает а с флагом [P] нет
 
Добавлено:
Проблема с хостером, он уже начал инсталяцию данного модуля Вот почему я больше 2 лет с моим хостером (всегда установит модуль, если обьяснить зачем это нужно)

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 13:22 10-08-2006
Открыть новую тему     Написать ответ в эту тему

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