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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
crimea360
Закоментированные строки содержат ошибку. Вместо

Код:
RewriteRule ([^/]*)/([^/]*)/([^/]*)/([^/]*)/index\.html  /?$1=$2&$3=$4 [L]  
RewriteRule ([^/]*)/([^/]*)/index\.html  /?$1=$2 [L]  

 
следует писать
 

Код:
RewriteRule ([^/]*)/([^/]*)/([^/]*)/([^/]*)/index\.html  /?$1=$2&$3=$4 [L]  
RewriteRule ([^/]*)/([^/]*)/index\.html  /index.php?$1=$2 [L]  

где вместо index.php должно быть имя скрипта-обработчика

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 13:35 22-08-2007
Tstf



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

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

Значит такое сделать я не смогу.
 
Что же с htaccess ? как быть?

Всего записей: 788 | Зарегистр. 22-04-2003 | Отправлено: 14:30 22-08-2007
crimea360

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dacuan
 
Спасибо, действительно заменил /?$1=$2 [L]  на /index.php?$1=$2 [L] и все заработало

Всего записей: 29 | Зарегистр. 03-01-2007 | Отправлено: 15:34 22-08-2007
Anton_Y



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите решение..
есть домен ONE, а также есть два CNAME на него (TWO, THREE)
 
т.е. http://one = http://two = http://three
хочу чтобы при заходе
по http://one открывалось все как обычно.. index.html и так далее.
 
а при заходе через http://two - был редирект на http://someurl1
и при заходе через http://three - был редирект на http://someurl2
 
делал разные вещи..
примерно вот так

Код:
 
RewriteEngine on
RewriteCond %{HTTP_HOST} ^two
RewriteRule ^/$ http://someurl1 [L]
 
RewriteCond %{HTTP_HOST} ^three
RewriteRule ^/$ http://someurl2 [L]
 

 
но что то не то.. не работает.. подскажите..

Всего записей: 581 | Зарегистр. 04-09-2002 | Отправлено: 13:20 31-08-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Anton_Y
 
А прочитать ветку лень? На предыдущей странице как раз обсуждается эта проблема.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 13:33 31-08-2007
Anton_Y



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
проблема решилась путем замены
 
RewriteRule ^/$ http://someurl1 [L]
 
на
 
RewriteRule ^(.*)$ http://someurl1 [L]

Всего записей: 581 | Зарегистр. 04-09-2002 | Отправлено: 13:54 31-08-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Anton_Y
Ага, и получаем вечный цикл

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 14:03 31-08-2007
Anton_Y



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
у меня все пучком.. никаких циклов

Всего записей: 581 | Зарегистр. 04-09-2002 | Отправлено: 14:12 31-08-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Anton_Y
Именно эта строка? Или все-таки немного с отличием?

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 14:18 31-08-2007
Anton_Y



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

Код:
[root@mail [16:25:31] tmp]# cd /usr/local/apache/htdocs
[root@mail [16:32:01] htdocs]# more .htaccess
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^awstat
RewriteRule ^(.*)$ http://myurl1 [L]
 
 
RewriteCond %{HTTP_HOST} ^sams
RewriteRule ^(.*)$ http://myurl2 [L]
 
DirectoryIndex index.html
 
 

Всего записей: 581 | Зарегистр. 04-09-2002 | Отправлено: 14:32 31-08-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Anton_Y
Удивлен, страницу назад подобный конфиг не работал у двух людей.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 15:28 31-08-2007 | Исправлено: dacuan, 15:36 31-08-2007
koc



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
помогите преобразовать ссылку типа http://site.ua/?op=game&g=f_e_a_r в http://site.ua/game/f_e_a_r
ессно f_e_a_r - не постоянное слово.

Всего записей: 270 | Зарегистр. 04-03-2005 | Отправлено: 15:56 07-09-2007
RizaR

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!  
Интересует возможность создания поддомена для профиля пользователя вида site.ru/index.php?name=Account&op=info&uname=Vasia
А поддомен должен иметь вид:  
Vasia.site.ru
Мне сказали, что это невозможно, в интернете я нашел только возможность создавать поддомены для отдельной папки.
Но ведь каким-то чудом создаются поддомены на livejournal.com, nnm.ru, beon.ru и пр. Как у них это получилось?

Всего записей: 81 | Зарегистр. 23-09-2005 | Отправлено: 07:02 13-09-2007 | Исправлено: RizaR, 07:05 13-09-2007
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
RizaR
http://forum.ru-board.com/topic.cgi?forum=31&topic=8134&start=300#12

----------
comming soon..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 09:48 13-09-2007
RizaR

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Эм.... у меня ситуэйшен немного посложнее.
 
Там в коде используется такой пример (в настройках сервера)  

Цитата:
 
ServerName mysite.com
ServerAlias blog.mysite.com
 

 
 
 

Цитата:
 
 RewriteEngine   On
RewriteBase /
RewriteCond %{HTTP_HOST} ^blog.mysite.com$
RewriteRule ^(.*)$       blog/$1  [NS,L]  
 
 
Это в  .htaccess  
 
Тут четко прописано - blog
Но у меня то имя и поддомен может быть совершенно любым

Всего записей: 81 | Зарегистр. 23-09-2005 | Отправлено: 18:23 13-09-2007
GTHack



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
на конкретном сервере (на другом работает) не работает довольно стандартный набор правил для мод-реврайта

(.htaccess в директории ./rewrite/)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /rewrite/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /rewrite/index.php [L]
</IfModule>

даёт 500ю Internal Server Error, вот лог аппача

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

т.е. петля получилась почему то

поставил
RewriteLogLevel 3

вот одна из "попыток" из лога мод-реврайта

strip per-dir prefix: /var/vhosts/domain.com/httpdocs/proxy5/index.php -> index.php
applying pattern '.' to uri 'index.php'                                              
strip per-dir prefix: /var/vhosts/domain.com/httpdocs/proxy5/index.php -> index.php
applying pattern '.' to uri 'index.php'                                              
rewrite 'index.php' -> '/proxy5/index.php'                                          
trying to replace prefix /var/vhosts/domain.com/httpdocs/proxy5/ with /proxy5/    
internal redirect with /proxy5/index.php [INTERNAL REDIRECT]                        
applying pattern '.' to uri 'redirect:/proxy5/index.php'                            
rewrite 'redirect:/proxy5/index.php' -> '/proxy5/index.php'                          
trying to replace prefix /var/vhosts/domain.com/httpdocs/proxy5/ with /proxy5/    
internal redirect with /proxy5/index.php [INTERNAL REDIRECT]                      

вижу что косячит, а как поправить не знаю
помогите плс

----------
Мой блог

Всего записей: 554 | Зарегистр. 03-03-2003 | Отправлено: 13:23 18-09-2007
pinkwolf

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите!  
 
Есть такое правило:
RewriteRule ^([^/]*)/$ /index.php?o=$1 [L]
 
Как сделать исключение, например, для папки /admin/ , тоесть нужно что бы для определенных папок редирект не работал.

Всего записей: 2 | Зарегистр. 19-12-2005 | Отправлено: 05:22 20-09-2007
Vygose



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите плиз, почему не совсем верно работает такой код htaccess.
Качают файл гигабайтами с programas-gratis, вот попробовал их
на download.com отправлять, но не работает, отдает мой файл почему-то.
 
Вот весь файл, на всякий случай:
 
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html  
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^http://www.mysite.com/download/mysoft.exe$
RewriteCond %{HTTP_REFERER} ^http://.*programas-gratis.*$ [NC,OR]
RewriteCond %{REMOTE_HOST} ^202-228.furanet.com$ [NC,OR]
RewriteCond %{REMOTE_ADDR} ^195.78.228.202$ [NC]
RewriteRule ^.*$ http://www.download.com/MySoft/zzzz.html [R,L]

Всего записей: 574 | Зарегистр. 01-10-2002 | Отправлено: 01:10 06-10-2007
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pinkwolf
Написать для них правило и поставить его первым в списке.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 18:33 06-10-2007
artserge

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
игнорируется файл .haccess со следующим содержимым (хостинг ник.ру)
 
Options +FollowSymLinks
RewriteEngine on
 
RewriteBase /
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*).html$ index.php?$1 [L,QSA]  
 
 
Сервер возвращает ошибку 404, и даже при намеренной ошибке в синтаксисе .htaccess - 404 а не 500
 
В настройках хостинга мод_реврайт включен

Всего записей: 8 | Зарегистр. 10-03-2007 | Отправлено: 12:41 09-10-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