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

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

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

Код:
 
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php [L]
 

 
В index.php следующее:

Код:
 
$db_conn = mysql_connect($db_host, $db_user, $db_pass) OR DIE("Не могу создать соединение ");
mysql_select_db($db_select, $db_conn) or die(mysql_error());
$db_query = "INSERT INTO $db_st (name,parentname,date) VALUES ('2','3','".date("Y-d-m H:i:s")."')";
mysql_query($db_query);
 

 
При выполнении  index.php в таблице создаётся две записи, т.е. как-будто  index.php два раза запускается.
Подскажите пожалуйста, как можно это исправить?
 
Добавлено:
Потому что браузер ещё favicon.ico запрашивал.
Добавил

Код:
 
RewriteCond %{REQUEST_URI} !^/favicon.ico
 

Всего записей: 125 | Зарегистр. 09-01-2005 | Отправлено: 13:21 03-04-2011 | Исправлено: ShafMAN, 16:05 03-04-2011
Fader



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите готовое решение для следующей задачи:
 
хотелось бы СНГ-шный трафик по запросу site1.ru оставлять на site1.ru, а буржуев отправлять на site2.com.
Т.е. перечень IP диаппазонов (СНГ) скиппать, остальные: на site2.com
 
спасибо

Всего записей: 898 | Зарегистр. 03-01-2004 | Отправлено: 14:36 04-04-2011
C0ld_V0id



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте! Подскажите пожалуйста следующее:
Есть сайт с папкой cat, где находятся много файлов (конечное кол-во неизвестно), нужно превращать названия файлов в ЧПУ на примере:
http://site.ru/cat/ocean.php превратить в http://site.ru/ocean
Все это должно применяться только к файлам в папке cat
 
Заранее спасибо!

----------
Создание и поддержка сайтов.

Всего записей: 1186 | Зарегистр. 27-10-2002 | Отправлено: 17:14 04-04-2011
Overness

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите составить правило, убирающие часть данных из URL, чтобы например из такого URL www.sait.zone/?index=stat/index сделать такой  www.sait.zone/index
пытался на основе примеров сделать сам, но не работает, вот что получилось накалякать
RewriteEngine On  
RewriteRule ^([^/]*)$ /?index=stat=$1 [L]

Всего записей: 2 | Зарегистр. 14-04-2011 | Отправлено: 18:39 14-04-2011
Cheery



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

Цитата:
Все это должно применяться только к файлам в папке cat

что нить такого вида
RewriteCond %{DOCUMENT_ROOT}/cat%{REQUEST_URI}.php -f
RewriteRule /?(.*)$ cat/$1.php [L]  
не проверял, так что смотрите
 
Overness
RewriteEngine On  
RewriteCond %{REQUEST_URI} !index\.php
RewriteRule ^([^/]*)$ /index.php?index=stat/$1 [L]
 
опять же - не проверял, даю приблизительный код

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:35 15-04-2011
Overness

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery спасибо за подсказку, немного изменив все заработало, выкладываю вариант может кому поможет
RewriteEngine On  
RewriteCond %{REQUEST_URI} !index\.php
RewriteRule ^([^/\.]+)/?$ index.php?index=stat/$1 [L]

Всего записей: 2 | Зарегистр. 14-04-2011 | Отправлено: 08:53 15-04-2011
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите плз настроить правильно - вроде просто все но где то торможу..
1. Сайт на joomla, многояз, надо чтобы урл видов http://mysite.com/ru/home , http://mysite.com/en/home , http://mysite.com/de/home  - в общем для всех языков просто перенаправлялись на http://mysite.com или http://mysite.com/index.php  
2. На другом сайте - по одной из ссылок идет бесконечный редирект, как проанализировать и выяснить причину?

Всего записей: 2155 | Зарегистр. 18-06-2006 | Отправлено: 10:51 15-04-2011
Cheery



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

Цитата:
На другом сайте - по одной из ссылок идет бесконечный редирект, как проанализировать и выяснить причину?

включить RewriteLog на время и потом проанализировать файл с логами

Цитата:
Сайт на joomla, многояз, надо чтобы урл видов

и?
RewriteCond %{REQUEST_URI} ^/[a-z0-9]{2}/ [NC]
RewriteRule (.*) index.php [L]


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

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



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

Цитата:
включить RewriteLog на время и потом проанализировать файл с логами

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

Цитата:
и?
RewriteCond %{REQUEST_URI} ^/[a-z0-9]{2}/ [NC]
RewriteRule (.*) index.php [L]  

к сожалению, не срабатывает  - при любом переходе на ..../home попадаю на ...../home

Всего записей: 2155 | Зарегистр. 18-06-2006 | Отправлено: 00:03 16-04-2011
Cheery



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

Цитата:
к сожалению, не срабатывает

я проверил - все работает.. куда добавили?
и есть ли фактически эта папка на сервере

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:14 16-04-2011 | Исправлено: Cheery, 00:14 16-04-2011
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
добавил конечно же в .htaccess.
А на сервере физически папок /ru /de /en и т.п. нет -как и home-  это joomlo-вский sef создает если его включить короткие урлы, кроме того, что там полно дублей, у меня криво срабатывают переходы с главной, если ее урл отличен от /index.php  - поэтому и надо, чтобы по псевдонимам главной попадать реально на index.php....

Всего записей: 2155 | Зарегистр. 18-06-2006 | Отправлено: 01:08 16-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
я проверил на корневой htaccess - все работает.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:09 16-04-2011
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
я вам верю.
включил логирование на время, вот лог попытки только одного перехода на mysite.demo/home -  
Подробнее...

Всего записей: 2155 | Зарегистр. 18-06-2006 | Отправлено: 02:30 17-04-2011 | Исправлено: Weinaum, 02:32 17-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
ну так у вас куча других правил там, которые могут повлиять..
как видите, все срабатывает

Цитата:
192.168.2.100 - - [17/Apr/2011:00:21:24 +0200] [mysite.demo/sid#7fd523cfe6c8][rid#7fd523fee1b8/initial] (2) [perdir /var/www/mysite.demo/] rewrite 'en/home' -> 'index.php'  



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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:32 17-04-2011
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
ну да, я полагаю, как раз стандартные правила для joomla там и прописаны...
т.е. я сам туда ничего не прописывал, взял стандартный htaccess для joomla, который идет в комплекте.
Там по видимому так: те правила, которые там прописаны по дефолту, как раз и создают чпу- ссылки, типа mysite/home и все остальные, например, кнопка меню home на деле имеет реальный адрес вида http://mysite.demo/index.php?option=com_content&view=frontpage, а ее короткий чпу вид - http://mysite.demo/home видимо и получается путем добавления к http://mysite алиаса home(который мы сами выбираем и создаем по своему вкусу в joomla-вской админке) с помощью стандартного правила. И вот это стандартное правило срабатывает, и видимо перекрывает нужное...
Если я правильно понимаю, если отключить стандартное правило, то и вновь созданное не будет работать, ну только если вручную в адресной строке браузера написать http://mysite.demo/home - а по нажатию на кнопку меню такой ссылки не будет и нечего будет обрабатывать..
Наверное, чтобы все срабатывало, нужно как то переписывать стандартное joomla-вское правило? или еще как то?
На всякий случай, вот стандартный joomla-вский htaccess, новое правило я закомментировал пока,и в любом случае, спасибо за помощь.
Подробнее...

Всего записей: 2155 | Зарегистр. 18-06-2006 | Отправлено: 14:33 17-04-2011 | Исправлено: Weinaum, 14:35 17-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
у вас дальше вот этого правила не пойдет
 

Цитата:
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_URI} !^/index.php  
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]  
RewriteRule (.*) index.php  
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]  

 
 
оно же и срабатывает на /en/home, так как нет такой папки или директории.
в общем непонятно тогда, чего вы пытаетесь добиться

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:10 18-04-2011
Anton_Y



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
подскажите, что я делаю не так..
делаю алиас /share/, и хочу чтобы туда ходили юзеры только через https (с помощью mod_rewrite)
но нихрена не срабатывает модреврайт )) что не так?
 

Код:
 
Alias /share/ "/MYFOLDER/"
<Directory "/MYFOLDER">
 
        RewriteEngine on
        RewriteBase /
        RewriteCond %{SERVER_PORT} !^443$
        RewriteRule ^/(.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
 
        AuthPAM_Enabled on
        AuthType basic
        AuthName "rapdishare secure area"
        Require user hyuser
 
        AllowOverride All
        Order allow,deny
        Allow from all
</Directory>
 

 

Всего записей: 582 | Зарегистр. 04-09-2002 | Отправлено: 13:05 20-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Anton_Y
а так?
RewriteCond %{SERVER_PORT} 80  

Цитата:
^/(.*)  

слэш пробовали убрать?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:53 20-04-2011
Anton_Y



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

Всего записей: 582 | Зарегистр. 04-09-2002 | Отправлено: 13:10 21-04-2011
Schtopt

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день! У меня возникла проблема с редиректом на сайте.
 
В .htaccess с помощью mod_rewrite сделаны все ссылки так, чтобы не было видно параметров передаваемых php.
Сделано таким образом  
 
RewriteRule (.*)\.html$ object.php?path=$1 [L]
 
 
На сайте еще необходимо сделать 301 редирект вида
 
RedirectMatch 301 ^/{категория}/(.*) хттп://{сайт}/catalog/{категория}/$1  
 
Но при этом редиректе в url появляется хвост в виде параметров php
 
хттп://{сайт}/{категория}/{объект}.html   ->  хттп://{сайт}/catalog/{категория}/{объект}.html?path={объект}
 
Как можно избавиться от этого добавления?

Всего записей: 8 | Зарегистр. 28-04-2011 | Отправлено: 18:22 04-05-2011
Открыть новую тему     Написать ответ в эту тему

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