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

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



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

Цитата:
игнорируется файл .haccess со следующим содержимым

эм.. ну и? возможно настроен на файл с другим именем.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:15 09-10-2007
CfCoder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ранее мне не приходилось пользаваться mod_rewrite.
Возможно ли переписать с помощью mod_rewrite.  
 
http://domain/gallery.php
на
http://domain/gallery/

Всего записей: 190 | Зарегистр. 11-01-2005 | Отправлено: 00:41 10-10-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CfCoder
возможно.. тут даже mod_rewite не нужен
http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirect

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:42 10-10-2007
CfCoder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В .htaccess прописал, но редирект не работает.
 
Redirect /gallery.php http://domain/gallery
 
Помогите разобраться.
 

Всего записей: 190 | Зарегистр. 11-01-2005 | Отправлено: 12:07 10-10-2007
Cheery



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

Цитата:
В .htaccess прописал

который расположен где?  


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 17:40 10-10-2007
CfCoder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В корне
 
Так заработало:
Redirect gallery.php http://domain/gallery  
 
Tak не работает
Redirect gallery.php http://domain/image_gallery

Всего записей: 190 | Зарегистр. 11-01-2005 | Отправлено: 23:30 10-10-2007
Poloten4ik

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем здрасьте.
 
У меня такая проблема:
нужно сделать ВНУТРЕННИЙ редирект с URL вида  
subdomain.site.ru?par=1&par2=2
на url вида  
site.ru?par=1&par2=2
 
В корне поддомена "subdomain" лежит htaccess со след кодом:
RewriteEngine on
RewriteOptions MaxRedirects=10
Options +FollowSymlinks
RewriteBase /
RewriteRule ^.htaccess$ - [F]
RewriteRule ^(.*)$ http://site.ru/$1
В этом случае происходит ВНЕШНИЙ редирект на site.ru
 
 
Если файл использовать след код (без http:// перед доменом)
RewriteEngine on
RewriteOptions MaxRedirects=10
Options +FollowSymlinks
RewriteBase /
RewriteRule ^.htaccess$ - [F]
RewriteRule ^(.*)$ site.ru/$1
 
То естественно mod_rewrite пытается отобразить subdomain.site.ru/site.ru/.......
 
Как быть в этом случае? Может есть какая то директива, позволяющая обязать использовать внутренний редирект даже при прописывании домена с http://.
Или это в принципе невозможно?

Всего записей: 1 | Зарегистр. 16-10-2007 | Отправлено: 14:14 16-10-2007
Agent_SMIT



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте.
Подскажите кто что может..
 
Допустим есть блог blog.site.ru, на котором есть сообщение blog.site.ru/post..
Как настроить редирект, чтобы перенаправлялось так:
 
http://www.blog.site.ru            ---> http://blog.site.ru/
http://www.blog.site.ru/           ---> http://blog.site.ru/
http://www.blog.site.ru/post     ---> http://blog.site.ru/post/
http://www.blog.site.ru/post/    ---> http://blog.site.ru/post/
http://blog.site.ru/post             ---> http://blog.site.ru/post/
 
Чтобы все адреса были без ввв и со слешем на конце.
 
Советовали такой код, но работает некорректно:
 
Options +Indexes
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.твой-блог.ru
RewriteRule ^(.*)$ http://blog.site.ru/$1 [R=permanent,L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://blog.site.ru/$1/ [L,R=301]

----------
Человек, который осмеливается потратить впустую час времени, ещё не осознал цену жизни.
© Чарльз Дарвин

Всего записей: 997 | Зарегистр. 20-04-2006 | Отправлено: 17:19 25-10-2007 | Исправлено: Agent_SMIT, 17:27 25-10-2007
Perf2k2

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Agent_SMIT Попробуй так:
 
RewriteCond %{HTTP_HOST} ^www\.blog\.site\.ru$ [NC]
RewriteRule ^(.*)$ http://blog.site.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} /[?.]
RewriteRule .* http://blog.site.ru/? [R=301,L]
RewriteCond %{THE_REQUEST} /[/]
RewriteRule .* http://blog.site.ru/? [R=301,L]
 
 
-----------------------------------------------------------------------------
 
Ребят, есть вопрос по mod_rewrite.  
 
Есть определенный сайт, есть файлик htaccess, в нем использую правила наподобии этого:  
 
RewriteRule ^benefits/potreb/(.*).html$ benefits/potreb/index.php?page=$1 [L]  
 
Здесь все нормуль, работает. При обращении к адресу benefits/potreb/1.html открывается страница benefits/potreb/index.php?page=1. Но! Нужно сделать так, чтобы нельзя было при этом обратиться к скрипту напрямую, т.е. benefits/potreb/index.php?page=1. Можно ли это организовать как-нибудь?  
 
Спасибо.

Всего записей: 10 | Зарегистр. 12-05-2006 | Отправлено: 18:43 25-10-2007 | Исправлено: Perf2k2, 18:44 25-10-2007
kostyar



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть проблема.  
Перевели сайт на статические ссылки, но в .htaccess дописали правило для того чтобы поисковик переходя по старым ссылкам проиндексировал новые. Но при этом если в адресной строке набрать старую динамическую ссылку, то происходит зацыкливание. Вот как выглядят правила.
 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /show_good\.php\?idtov=([0-9]+)(&[^\\]+)?\ HTTP/ [NC]
RewriteRule ^show_good\.php$ /serial-%1.html? [R=301,L]
RewriteRule ^serial-([0-9]+)\.html$ /show_good.php?idtov=$1 [NC,L]
 
P.S. Причем на локальном сервере все номально работает
 
 
Может подскажет кто-нибудь в чем проблема????




Создание дублей вопроса в разных разделах форума запрещено правилами /Cheery/

Всего записей: 29 | Зарегистр. 18-02-2004 | Отправлено: 13:37 27-10-2007 | Исправлено: Cheery, 21:14 27-10-2007
crazyASD



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите как сделать редирект с  
http://site.ru/forum/index.php?PHPSESSID=f07ac91aedbffeac9a07ec9108551690&action=register
http://site.ru/index.php?option=com_registration&task=register
на
http://site.ru/component/option,com_smf/Itemid,174/action,register
В программировании не разбираюсь, просто прошу помочь соображающих.
Заранее спасибо

Всего записей: 239 | Зарегистр. 02-01-2006 | Отправлено: 19:21 10-11-2007 | Исправлено: crazyASD, 19:50 10-11-2007
crazyASD



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Переыв гугль построил такую конструкцию и пложил .htaccess в /forum/:
   
Код:
RewriteEngine On
   RewriteBase /
   RewriteCond %{HTTP_HOST} !^(www\.site\.ru\|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|0x[0-9a-f]{8})$ [NC]
  RewriteCond %{HTTP_HOST} !^$
  RewriteRule ^(.*)$ http://www.site.ru/component/option,com_smf/Itemid,174/action,register$1 [R=301,L]
 

 
Но! во-первых переадресация происходит напрямую при обращении к корню /forum/ - а требуется переадресация при переходе по: http://site.ru/forum/index.php?PHPSESSID=f07ac91aedbffeac9a07ec9108551690&action=register  
+ требуется исключить PHPSESSID=f07ac91aedbffeac9a07ec9108551690&

Всего записей: 239 | Зарегистр. 02-01-2006 | Отправлено: 12:30 11-11-2007
shustersh

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Каким образом можно сделать защиту от кеширования?
Т.е. имеем url вида domain.com/music
также в этой папке есть файлы index.php и load.php и папка с музыкой mp3
Необходимо чтобы пользователь видел ссылки в виде  
domain.com/N/music/mp3/11.mp3 где N меняется случайным образом при запросе и в конечном итоге ведет на оригинальный файл domain.com/music/mp3/11.mp3
Пробовал написать такое
 
 
Добавлено:
Каким образом можно сделать защиту от кеширования?
Т.е. имеем url вида domain.com/music
также в этой папке есть файлы index.php и load.php и папка с музыкой mp3
Необходимо чтобы пользователь видел ссылки в виде  
domain.com/N/music/mp3/11.mp3 где N меняется случайным образом при запросе и в конечном итоге ведет на оригинальный файл domain.com/music/mp3/11.mp3
Пробовал написать такое
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^.htaccess$ - [F]
RewriteRule ^(.*)(/[0-9]*/)(.*)$ /mp3/$1/$3
но тогда проблема - файлы index.php и load.php не доступны А если и доступны, то тогда url становится не динамическим
Помогите

Всего записей: 23 | Зарегистр. 01-08-2006 | Отправлено: 08:53 20-11-2007
driverok



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нужно сделать следующее-  
 
если в урле присутствует сабдомен (например 123.domen.com)
нужно перенаправить его на domen.com/index.php?sub=123
 
если в урле присутствует сабдомен и переменные (например 123.domen.com/param/value.html)
нужно перенаправить его на domen.com/index.php?sub=123&param=value
 
Сабдомен и value - могут быть только числовыми
 
сам пока сваял вот это (но полностью не работает)

Код:
 
RewriteEngine on  
RewriteBase /  
 
RewriteCond %{HTTP_HOST} !^www\.domen\.com$  
RewriteCond %{HTTP_HOST} (www\.)?(.*)\.domen\.com$  
RewriteCond %{REQUEST_URI}  !^(.+)
RewriteRule ^(.*)$ index.php?sub=%2
 
RewriteCond %{HTTP_HOST} !^www\.domen\.com$  
RewriteCond %{HTTP_HOST} (www\.)?(.*)\.domen\.com$  
RewriteCond %{REQUEST_URI}  ^(.+)$
RewriteRule ^(.*)/([0-9]+)\.html$ index.php?sub2=%2&param=$1
 

 
помогите

Всего записей: 91 | Зарегистр. 02-08-2004 | Отправлено: 11:49 20-11-2007
Ryoga67

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

Всего записей: 53 | Зарегистр. 03-08-2006 | Отправлено: 17:56 22-11-2007 | Исправлено: Ryoga67, 21:30 22-11-2007
Kopernik

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В папке folder лежит файл .htaccess со след. правилом
RewriteBase /folder/
RewriteRule ^(.*)$ form.php?q=$1 [L,QSA]
 
При обращении к URL:
www.xxx.ru/folder/
В form.php передается параметр q=/folder/  
и дальше в скрипте разбирается.  
 
При обращении к URL
www.xxx.ru/folder (без слэша)
URL преобразуется в
www.xxx.ru/folder/?q=C:/Apache2/htdocs/folder
т.е. в параметр записывается путь к папке на сервере.
В чем дело во втором случае? Откуда берется этот параметр? И как сделать, чтобы все работало без слэша так же, как с ним?

Всего записей: 5 | Зарегистр. 05-07-2006 | Отправлено: 03:57 25-11-2007 | Исправлено: Kopernik, 05:39 25-11-2007
Mavn



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Необходимо чтобы при обращении site/index.php обрабывался например index_s.php но при этом index.php?object отобратывался стандартно.
помогите пожалуйста
 
crazyASD
 
Обычный редирект сделай с ttp://site.ru/forum/index.php?action=register на ttp://www.site.ru/component/option,com_smf/Itemid,174/action,register

Всего записей: 97 | Зарегистр. 01-09-2003 | Отправлено: 14:29 25-11-2007 | Исправлено: Mavn, 14:33 25-11-2007
afiget



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

Цитата:
При обращении к URL:  
www.xxx.ru/folder/  
В form.php передается параметр q=/folder/

Я в этом очень сомневаюсь. При указанных правилах у вас q="" - пустая строка.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 14:31 25-11-2007
Kopernik

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2afiget
Спасибо. Нашел ошибку.

Всего записей: 5 | Зарегистр. 05-07-2006 | Отправлено: 16:15 25-11-2007
Autoshkatulka



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте!
У меня почти та же ситуация сейчас, как та, что была у Pirates в первой половине данной темы. Там ему посоветовали сделать следующее:
 
dacuan

Цитата:
Pirates
Надо так:
 
Код:
 

Цитата:
RewriteEngine on  
RewriteCond %{REQUEST_URI} \.shtml?$  
RewriteRule ^(.*)\.shtml?$ $1.php [L]  

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

 
В моем случае это срабатывает, только мне еще надо, чтобы те страницы с которых идет переадресация отдавали код 301. Что требуется добавить к этим трем строкам, чтобы достигнуть данной цели?
 
 

Всего записей: 14 | Зарегистр. 21-01-2006 | Отправлено: 22:23 30-11-2007
Открыть новую тему     Написать ответ в эту тему

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