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

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



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

Цитата:
кто "просит"? пишет просто что запрос не подходит ни под одно из правил и поэтому проходит напрямик.

 
Все ссылки по документации просмотрел, сами доки почитал. Местами понимаю, местами нет и долгая история так чуствую, чтобы это всё настроить. Проект у нас не коммерческий а сетевой, и уже сетевики просят его включить в работу, как есть запустил, будь что будет  
 
Полюбому пасипки за помощь

Всего записей: 59 | Зарегистр. 19-10-2006 | Отправлено: 06:17 22-08-2009
Mouzes



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос гложит а можно ли с этим модом и файлом .htaccess всё же дать доступ в какой либо каталог, лежащий в корне, скажем там несколько расшаренных файлов. Или это нельзя уже организовать?

Всего записей: 59 | Зарегистр. 19-10-2006 | Отправлено: 13:25 22-08-2009
Mouzes



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

Всего записей: 59 | Зарегистр. 19-10-2006 | Отправлено: 07:37 23-08-2009 | Исправлено: Mouzes, 15:25 23-08-2009
Cheery



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

Цитата:
RewriteEngine On  
RewriteCond %{SERVER_PORT} 80  
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]


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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброй ночи!

Код:
 
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.site\.ru$ [NC]
RewriteCond %{HTTP_HOST} !^www\.site\.ru[NC]
RewriteCond %{REQUEST_URI} !^/subdomains
RewriteRule ^(.*) %{HTTP_HOST}$1
RewriteRule ^(.*)\.site\.ru(.*) index.php?town=$1&c=$2
RewriteRule ^subdomains\.(.*) /subdomains/$1
 

 
При использовании кода выше работает только http://sub.site.ru, все остальное (http://sub.site.ru/cat/,http://sub.site.ru/add.php и т.д.) адресуется, опять же на http://sub.site.ru.
 
А нужно организовать следующее:
http://sub.site.ru/newyork/cat/, что, соответственно, будет обозначать запрос к скрипту
index.php?cat1=sub&town=newyork&cat2=$cat
 
Помогите, как решить проблему?

Всего записей: 10 | Зарегистр. 02-08-2004 | Отправлено: 00:04 27-08-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ragimoff
дописываете  
RewrieRule %{QUERY_STRING}  !^/newyork
и не будет срабатывать на ту директорию
и так для каждой директории, на которую хотите, чтобы не срабатывало..
для данного преобразования нужно писать отдельное правило


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:53 27-08-2009 | Исправлено: Cheery, 02:54 27-08-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я вот тут задумался.. а можно ли в RewriteCond проверить путь, который, скажем, получен в пред. условии?
Скажем
RewriteCond %{REQUEST_URI}   test=([a-z]+) [NC]
RewriteCond %1   -d
вот как выделенное сделать по нормальному? проверить, что есть директория с именем указанным в аргументе? Там нужно полный путь, похоже, сформировать.. Только как выцепить физический путь к данной директории?
оно работает если прописать полностью
RewriteCond %{DOCUMENT_ROOT}/путь_от_корня/%1 -d
но может есть способ получить путь к дире, где находится .htaccess?


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 05:42 27-08-2009 | Исправлено: Cheery, 05:49 27-08-2009
board478

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как сделать  
http:\\site.com\shop\page1.html  =>>>  
http:\\site.com\page1.html  
 
тоесть убрать          shop\
 
очень хотелось бы в виртуемарте убрать этот Псевдоним (shop).
заранее благодарен

Всего записей: 24 | Зарегистр. 14-09-2009 | Отправлено: 01:08 26-09-2009
YFocker

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую!
Возникла необходимость в следующем:
Имеется адрес:
http://localhost/phpBB3/viewforum.php?f=3
 
Нужно привести его к виду http://localhost/forum/3
 
Пишу вот что:
RewriteRule ^(.*)forum/(.*)$ $1viewforum.php?f=$2
 
Подскажите пожалуйста, где я неправ..
Спасибо!

Всего записей: 2 | Зарегистр. 30-09-2009 | Отправлено: 13:23 30-09-2009
dacuan

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

Код:
RewriteRule ^forum/(.*)$ phpBB3/viewforum.php?f=$1

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dacuan, спасибо за ответ, попробовал, но результата нет...
Возможно, я уже начинаю мудрить, но ведь настраивается "корневой" файл .htaccess, потому что файл с таким же именем у меня еще находится в папке /phpBB3.  
Мой корневой .htaccess содержит:
<IfModule mod_rewrite.c>
  RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
   
  RewriteRule ^(.*)$ index.php?q=$1 [QSA]
  RewriteRule ^forum/(.*)$ phpBB3/viewforum.php?f=$1  
</IfModule>
 
В httpd.conf у меня включено  
...
<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Deny from all
</Directory>
...
но логи (файл error.log, там я пытаюсь найти то, что бы показало мне ошибки реврайтинга) у меня никак не откликается - там не появляется данных об изменениях, которые я провожу..
совсем запутался. ощущение, что модуль реврайта не работает.
Буду благодарен любым идеям...

Всего записей: 2 | Зарегистр. 30-09-2009 | Отправлено: 16:59 30-09-2009 | Исправлено: YFocker, 17:00 30-09-2009
dacuan

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

Цитата:
но логи (файл error.log, там я пытаюсь найти то, что бы показало мне ошибки реврайтинга) у меня никак не откликается - там не появляется данных об изменениях, которые я провожу..

Логи реврайта включаются отдельно. Об этом написано в шапке:

Цитата:
Настройка журналирования (Лога):  
 
Чтобы включить лог mod_rewrite необходимо в описании вашего виртуального хоста (обычно это файл httpd.conf) добавить две строчки:  
 

Код:
RewriteLog /путь/к/лог/файлу  
RewriteLogLevel 9

 
И перезапустить апача. Крайне не рекомендуется производить это на работающем сервере, так как объемы отладочной информации генерируются действительно большие и найти свое бывает очень сложно.

 
Во-вторых, те RewriteCond, что у вас записаны в .htaccess влияют только на на первое правило и совершенно игнорируются вторым. Так что их следует либо продублировать либо удалить вообще. Я склоняюсь к второму.
 
В третих, попробуйте строку:

Цитата:
RewriteRule ^forum/(.*)$ phpBB3/viewforum.php?f=$1

 
заменить на
 

Код:
RewriteRule ^/forum/(.*)$ /phpBB3/viewforum.php?f=$1

 
 

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



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет!
имею ссылку http://sayt/page.php?s=2
хочу сделать ее такой http://sayt/2
 
вот такой код написалЖ
RewriteRule ^/(.*)$ /page.php?s=$1  
 
 
преобразование непроисходит.
в логах  
 
127.0.0.1 - - [05/Oct/2009:12:16:11 +0300] [sayt/sid#9ed230][rid#5d8ef40/initial] (3) [perdir Z:/home/sayt/www/] strip per-dir prefix: Z:/home/sayt/www/page.php -> page.php
127.0.0.1 - - [05/Oct/2009:12:16:11 +0300] [sayt/sid#9ed230][rid#5d8ef40/initial] (3) [perdir Z:/home/sayt/www/] applying pattern '^/(.*)$' to uri 'page.php'
127.0.0.1 - - [05/Oct/2009:12:16:11 +0300] [sayt/sid#9ed230][rid#5d8ef40/initial] (1) [perdir Z:/home/sayt/www/] pass through Z:/home/sayt/www/page.php
 
 
настраиваю все на денвере.
Подскажите куда смотреть.
Спасибо

Всего записей: 243 | Зарегистр. 08-12-2004 | Отправлено: 13:17 05-10-2009 | Исправлено: rstar1979, 13:21 05-10-2009
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
rstar1979
а page.php точно существует и открывается по запросу http://sayt/page.php ?

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 13:25 05-10-2009
rstar1979



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да но он без указание типа"http://sayt/page.php?s=2"  перекидует на http://sayt/index.php  
а с указанием кидает на смарти :
$smarty->template_dir = $tpl[0]->template_path;
  $smarty->display('kontakt.tpl');
но в строке ьраузера остаеться  http://sayt/page.php?s=2

Всего записей: 243 | Зарегистр. 08-12-2004 | Отправлено: 13:48 05-10-2009 | Исправлено: rstar1979, 13:58 05-10-2009
alex6886

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Перечитал все 35 страниц,аналогичного того что мне нужно не нашёл,помогите мне реализовать такую вещь есть страница test.html она с помощью мод реврайт показывается как главная,то есть при обращении к сайту www.my_site.ru Так вот,пользователям определённого диапазона айпи например 89.245.192.0 - 89.245.255.128 при обращении к сайту по адресу www.my_site.ru или напрямую к странице test.html должна показываться страница dubl.html а всем остальным как обычно test.html также как и при обращении к сайту по адресу www.my_site.ru Заранее спасибо за ответ.  

Всего записей: 45 | Зарегистр. 09-03-2006 | Отправлено: 17:16 18-10-2009 | Исправлено: alex6886, 17:40 18-10-2009
alex6886

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

Всего записей: 45 | Зарегистр. 09-03-2006 | Отправлено: 06:43 19-10-2009
ra1n



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

Код:
RewriteEngine On
RewriteCond %{QUERY_STRING}  page=1[^0-9]?
RewriteRule .*$ /pageA [L]  

 
Точнее оно работает, срабатывает при запросе нужной страницы, но перенаправления не происходит, выдает ошибку 500.
 
ссылка вот такая - _site.ru/index.php?page=1&langid=0
 
В .htaccess содержатся и другие правила:

Код:
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html
php_value error_reporting 7
ErrorDocument 404 /pages.php

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 08:31 02-11-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ra1n
читайте ло ошибок сервера - там будет все сказано о 500 ошибке

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:24 02-11-2009
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, мне уже советовали. Пока нет к ПУ доступа, поэтому спросил здесь, лишняя информация не повредит.

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 10:20 02-11-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