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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А у меня нет CMS. Весь ресурс состоит только из одного единственного index.php и множества swf файлов (не считая еще одного xls и одного pdf).
 
 Да черт с ними, ботами, главная задача, чтобы по ссылке в поисковике типа http://mysite.ru/0.swf пользователь мог попасть только (не внутренний запрос) на http://mysite.ru. Пусть боты лазают где хотят...
 
А так как множество флэшей могут ссылаться друг на друга, внутренний запрос не должен редиректиться на index.

Всего записей: 65 | Зарегистр. 11-01-2008 | Отправлено: 22:34 14-02-2011 | Исправлено: spin5, 22:36 14-02-2011
Cheery



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

Цитата:
Весь ресурс состоит только из одного единственного index.php и множества swf файлов

ну.. выдавайте их через php файл, проверяя куки, которые ставятся только при посещении основной страницы.

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

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

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

Цитата:
проверяя куки

Так а какие куки проверять, если их еще нет, и получив ссылку на флэшку первый раз юзер не попадает на php?

Всего записей: 65 | Зарегистр. 11-01-2008 | Отправлено: 23:57 14-02-2011
Cheery



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

Цитата:
Так а какие куки проверять, если их еще нет

сами и ставите..

Цитата:
и получив ссылку на флэшку первый раз юзер не попадает на php?

если будете выдавать swf файлы через php, то не будет попадать

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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот поэтому и стоит задача, чтобы с помощью mod_rewrite направить user-а на php при выдаче ему ссылки типа 'mysite .ru/ 0.swf'. ...а там уже и куки можно...
 
...в общем, от чего ушли, к тому и пришли!  

Всего записей: 65 | Зарегистр. 11-01-2008 | Отправлено: 00:12 15-02-2011 | Исправлено: spin5, 00:14 15-02-2011
Cheery



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

Цитата:
в общем, от чего ушли, к тому и пришли!

еще раз - нет.
 
swf.php?file=test
 
<?php
readfile($_GET['file']."swf");
?>
это как пример.. ессно проверка, чтобы не скачали любой файл и проверка куков..
и проверяйте тогда сколько хотите - есть доступ к файлу или нет.. прямых ссылок не будет
 
а хотите - сделайте "пустышку" swf, которая, когда указываешь путь в аргументах, подгружает файл в себя
тем самым тоже не будет "прямых" путей.. видно, если смотреть трафик, но так не будет указния в страницах прямого пути к файлам..  и опять, все реализуется через один файл. и не нужно придумывать что то для mod_rewrite, кроме переадресации к основному файлу.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:31 15-02-2011 | Исправлено: Cheery, 00:46 15-02-2011
spin5

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так, если я правильно понял:
при любом из запросов я проверяю куки у пользователя - если "моего" нет, то он адресуется к index, а если... ...приплыли...
 

Цитата:
swf.php?file=test  
 <?php  
readfile($_GET['file']."swf");  
?>

...а можно чуть-чуть подробней (в смысле расшифровать)?
дальше сам попытаюсь, главное - направление!
PS. C php совсем недавно начал, можно сказать, "от роду неделя" ))

Всего записей: 65 | Зарегистр. 11-01-2008 | Отправлено: 01:56 15-02-2011 | Исправлено: spin5, 02:02 15-02-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
spin5
так, эти разговоры к mod_rewrite уже не имеют никакого отношения
возвращайтесь сюда
Перенаправление на домашнюю страницу... (помогите, плз)

Цитата:
а можно чуть-чуть подробней (в смысле расшифровать)?  
дальше сам попытаюсь, главное - направление!  
 

читаем описание функции www.php.net/readfile


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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день уважаемые, бился сегодня над несколькими задачами, половину решил, половину так и не осилил, пол дня бьюсь и не могу разобраться почему не работает, надеюсь вы мне поможете. Объясняю всю суть проблемы :
 
1. Есть сайт http://site.ru
2. На сайте есть форма поиска такого вида :
 

Код:
 
<form action="http://site.ru/search/" method="get">  
<input type="text" name="global" />  
<input class="button" type="submit" value="Поиск" />  
</form>  
 

 
3. После ввода данных abcd и по нажатию кнопки - Поиск, ссылка принимает вид : http://site.ru/search/?global=abcd Тут все понятно, а мне нужно чтобы она принимала вид такой : http://site.ru/search/abcd и естественно чтобы я мог потом вытащить данные методом echo $_GET['global'];
 
С места не сдвинулся... правила реврайта такие :
 

Код:
 
AddDefaultCharset UTF-8
RewriteEngine On
RewriteRule ^search/(.*.$) ?global=$1 [NC] [L]
 

 
Помогите добрые люди, тому кто поможет через недельку вышлю ВИП ключ к сервису геолокации по приватным базам. А вообще если есть у кого желание помочь в развитии проекта, пишите. Заранее благодарен!!

Всего записей: 2 | Зарегистр. 27-09-2007 | Отправлено: 15:40 18-02-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dasksting
а при чем тут mod_rewrite в отношении формы? браузер знает как формировать строку запроса в соотвествии со стандартами. Если вам нужно формировать так, как вам хочется, то нужно использовать javascript
например так
<form action="http://site.ru/search/" method="get">  
<input type="text" name="global" />  
<input class="button" type="submit" value="Поиск" onclick='submit_form(this);return false;' />  
</form>  
<script>
function submit_form(obj)
{
var frm=get_form(obj);
window.location.href=frm.action+obj.previousSibling.value;  // тут, на самом деле, надо делать обработку данных, чтобы соответсвовали стандартам URL
}
function get_form( element )
    {
        while( element )
        {
            element = element.parentNode
            if( element.tagName.toLowerCase() == "form" )
            {
                //alert( element ) //debug/test
                return element
            }
        }
        return 0; //error: no form found in ancestors
    }
</script>
обсуждение этого лучше не делать в данной теме.

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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да я вот и думал что модревратером обойдусь без явы, не люблю я яву (иногда применяю, но лишь для редиректа и т.п.) потому что не понимаю ее совершенно либо просто не хочу понимать... ну а вообще возможно такое замутить с помощью реврайтера ????? если нет то придется яву использовать, просто хотелось усложнить жизнь хацкерам а когда они видят передачу параметров в ГЕТ сразу идет подстановка кавычек и т.п. Даже банальный сканер на уязвимости нагружает сервер имеено подбором когда видит такие ссылки, Спасибо за ответ, ждал и жду идей уже весь вечер! ВИП инвайт вам пришлю личным сообщением..
 
Может у кого еще идеи есть ?

Всего записей: 2 | Зарегистр. 27-09-2007 | Отправлено: 20:21 18-02-2011 | Исправлено: dasksting, 20:21 18-02-2011
Cheery



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

Цитата:
ну а вообще возможно такое замутить с помощью реврайтера

я еще раз говорю - mod_rewrite не влияет на формирование строки запроса браузером!!!!
он работает только на преобразование полученных данных в другой вид.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:14 18-02-2011 | Исправлено: Cheery, 21:15 18-02-2011
www777 777



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Просмотрел весь форум. Прочитал примеры. Попробовал различные варианты. Не получается...
Либо это очень просто, либо не возможно.
К сайту привязаны два домена dom1 dom2 Надо перенаправлять запросы в свои папки fld1 fld2
Из прочитанного наваял следующее (РАБОТАЕТ НЕ ПРАВИЛЬНО):


 
RewriteEngine On
RewriteBase /
 
RewriteRule ^fld1/ - [L]
RewriteCond %{HTTP_HOST} ^dom1\.org$
RewriteCond %{DOCUMENT_ROOT}/fld1%{REQUEST_URI} -d
RewriteRule [^/]$ %{REQUEST_URI}/ [R,L]
RewriteCond %{HTTP_HOST} ^dom1\.org$
RewriteRule (.*) fld1/$1 [L,QSA]
 
RewriteRule ^fld1/ - [L]
RewriteCond %{HTTP_HOST} ^www\.dom1\.org$
RewriteCond %{DOCUMENT_ROOT}/fld1%{REQUEST_URI} -d
RewriteRule [^/]$ %{REQUEST_URI}/ [R,L]
RewriteCond %{HTTP_HOST} ^www\.dom1\.org$
RewriteRule (.*) fld1/$1 [L,QSA]
 
Для dom2 аналогично
 


Действительно index.php открывается каждым доменом - свой. Это правильно.
Но все ссылки к ресурсам каждого сайта необходимо писать относительно корня.
Вместо http //dom1.org/resurs.htm надо писать http //dom1.org/fld1/resurs.htm
Вместо http //dom2.org/resurs.htm надо писать http //dom2.org/fld2/resurs.htm
Это не правильно.
Где ошибка?

Всего записей: 211 | Зарегистр. 10-01-2008 | Отправлено: 13:43 04-03-2011 | Исправлено: www777 777, 14:21 04-03-2011
mcdemon

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите пожалуйсто как настроить апач:  
Есть допустим файл vt.bat в корне htdocs  
   
Как настроить так, что-бы для определенных подсетей, был редирект на другой файл?  
   
Есть пару десятков подсетей, и для каждой нужно выдавать разные батники (в батниках сетевые маршруты, если кому интерестно )  
А для всех остальных выдавало 403 ошибку. (не обязательно)

Всего записей: 49 | Зарегистр. 18-08-2005 | Отправлено: 04:18 07-03-2011 | Исправлено: mcdemon, 04:19 07-03-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mcdemon
повторюсь о том, что высказал в ПМ - в вашем случае проще всего реализовать все php скриптом, к примеру.
не нужно перекидывать на разные bat файлы - можно просто динамически выдавать нужную информацию, считывая ее, хотя бы, из тех же bat (необязательно, можно и просто тестовых) файлов на сервере

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

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

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Моглибы вы предоставить мне такой скрипт?

Всего записей: 49 | Зарегистр. 18-08-2005 | Отправлено: 10:06 07-03-2011
Tstf



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

Код:
 
Ссылка в браузере
 

 
как прописать надо в mod_rewrite, чтобы понимало и начальные переменные (goods, mobile,1 ,1, norm, all) и те, которые пошли после вопроса?
 
Сейчас у меня идет строка в htaccess
 

Код:
 
RewriteRule ^goods/(.*)/([0-9]*)/([0-9]*)/([a-zA-Z_-]*)/([a-zA-Z_-]*)(/?)+$ index.php?do=goods&id_s=$1&st=$2&page=$3&view=$4&show=$5 [L]
 

 
Причем количество переменных после знака "?" неограничено.
 
 
 
ВОТ РЕШЕНИЕ
 

Код:
RewriteRule ^goods/(.*)/([0-9]*)/([0-9]*)/([a-zA-Z_-]*)/([a-zA-Z_-]*)/?+$ index.php?do=goods&id_s=$1&st=$2&page=$3&view=$4&show=$5 [QSA,L]


----------
Заработок 2.0

Всего записей: 788 | Зарегистр. 22-04-2003 | Отправлено: 14:04 07-03-2011 | Исправлено: Tstf, 11:14 08-03-2011
Cheery



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

Цитата:
Моглибы вы предоставить мне такой скрипт?

не для данной темы он
я открыл вашу старую тему и переименовал ее ближе к смыслу
Выдача разной информации для разных диапазонов IP адресов

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:49 07-03-2011
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день
 
Есть сайт, на нем две ссылки Главная(index.php) и Каталог(catalog.php).
 
Код ссылок выглядит так:

Код:
<a href="http://mydomen/">Главная</a>
<a href="http://mydomen/catalog/">Каталог</a>

 
Как разрулить это через rewrite?

----------
Абонентское обслуживание и ремонт компьютеров в Днепропетровске

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 13:29 26-03-2011
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Т.е. сложность для меня заключается в том что если это корень перенаправлять на index.php, если это /catalog/ перенаправлять на catalog.php, если это /news/ перенаправлять на news.php

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 15:26 27-03-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