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

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



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

Цитата:
просто не понял что значит  

ну я, к примеру, могу вызвать напрямик script.php?file=какой_нить_файл.php и получить его код. это как пример.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:48 14-11-2008
ZemoN



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

Цитата:
ну я, к примеру, могу вызвать напрямик script.php?file=какой_нить_файл.php и получить его код. это как пример.

опачки... а тут можно сделать только любой html ?
 
а в целом все правильно?

Всего записей: 17 | Зарегистр. 09-11-2008 | Отправлено: 00:08 15-11-2008
Cheery



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

Цитата:
а тут можно сделать только любой html ?  

чего?
 

Цитата:
а в целом все правильно?  

за исключением ошибок синтаксиса и смысловых. например в readfile не указано расширение файла, а оно передаваться не будет.. ну создайте директорию на сервере и поэкспериментируйте

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:59 15-11-2008
ZemoN



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
создал вот что:
.htaccess-
Код:
RewriteEngine on
RewriteRule ^.*\.html /script.php
 
redirect /_vti_bin http://www.microsoft.com
redirect /scripts http://www.microsoft.com
redirect /MSADC http://www.microsoft.com
redirect /c http://www.microsoft.com
redirect /d http://www.microsoft.com
redirect /_mem_bin http://www.microsoft.com
redirect /msadc http://www.microsoft.com
RedirectMatch (.*)\cmd.exe$ http://www.microsoft.com$1
 
DirectoryIndex index.html
Options -Indexes

script.php-
Код:
<?php    
 
$file = explode("?", getenv('REQUEST_URI'));
array_pop($file);
$file = $DOCUMENT_ROOT.$file[0];
 
require_once("geoip.inc");    
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);    
$ip = $_SERVER['REMOTE_ADDR'];    
if ($ip == '94.188.51.41')
{
  readfile($file);
  exit;
}
$code = geoip_country_code_by_addr($gi, $ip);    
if ($code=='RU')    
{    
  header("Location: http://yandex.ru");  
}    
else    
{    
  readfile($file);    
}    
?>
но:
1. Index сначала грузится без фильтра
2. При переходе уже на самом сайте переадрисовывает нежелательного пользователя нормально правда для желательного пользователя грузит пустую страницу(белый экран) а путь вверху показывает правильно
 
проблема вроде от сюда
Код:
$file = $DOCUMENT_ROOT.$file[0];
в чем тут дело?
 

Всего записей: 17 | Зарегистр. 09-11-2008 | Отправлено: 16:51 15-11-2008 | Исправлено: ZemoN, 17:56 15-11-2008
Cheery



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

Цитата:
в чем тут дело?  

в том, что переменная
Цитата:
$DOCUMENT_ROOT

пуста.. ее нет, а есть $_SERVER['DOCUMENT_ROOT']
смотрите результат функции phpinfo() - в отношении переменных окружения и все станет ясно

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:20 15-11-2008
CyberMo



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

Цитата:
RewriteEngine on
 
RewriteRule ^action/login/$ login.php
 
RewriteRule ^action/logout/$ logout.php
 
RewriteRule ^action/index/$ index.php

в итоге по указанному адресу выдаёт 404, в чём загвоздка?... только начал разбираться с этим делом...
 
Добавлено:
а, всё, разобрался.
в httpd.conf RewriteLogLevel 9 не прописал

Всего записей: 19 | Зарегистр. 15-11-2008 | Отправлено: 16:24 16-11-2008
Cheery



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

Цитата:
httpd.conf RewriteLogLevel 9 не прописал  

эм.. эта опция нужна только для логгирования действий, а не работы самих правил

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:37 16-11-2008
CyberMo



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
странно, добавил только эту строчку и всё заработало. убрал её - 404.

Всего записей: 19 | Зарегистр. 15-11-2008 | Отправлено: 03:45 17-11-2008
Cheery



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

Цитата:
странно, добавил только эту строчку и всё заработало. убрал её - 404.

смотрите как раз логи преобразования - там будет очевидно.. либо попробуйте добавить
 

Цитата:
RewriteRule ^action/login/$ login.php [L]
 
RewriteRule ^action/logout/$ logout.php [L]
 
RewriteRule ^action/index/$ index.php [L]

так как, вполне возможно, ниже есть еще правила и проблема возникает из за них


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:48 17-11-2008
Horor



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
вообщем трабла такая:  
страница юзера по умолчанию
_http://www.сайт.ru/my.php?user=cooluser
 
хотелось бы выставить реврайтом
_http://www.сайт.ru/cooluser/
 
по идее в коде имя юзера вызывается  
my.php?user=$row[0]
 
млин все перепробовал -запутолсо окончательно только....
 
хелп.
 
Добавлено:
попробовал:
 
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ my.php?user=$1 [L,QSA]
 
сервак ошибку выдает((((

Всего записей: 138 | Зарегистр. 14-01-2005 | Отправлено: 12:21 02-12-2008
PEDKA



Улыбающийся КС
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Horor
А других страниц типа _http://www.сайт.ru/page/ не будет?

----------
вот такая вот батва ©...
"Тестирование" это давно уже не помойка.
"Тестирование" это филиал "Помощи" ©

Всего записей: 15962 | Зарегистр. 04-05-2003 | Отправлено: 13:46 02-12-2008
Horor



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
будет, в зависимости от имени пользователя.  
 
Добавлено:
я сделал так:
RewriteEngine On
RewriteRule ^([A-Za-z0-9-]+)/?$ my.php?user=$1 [L]
 
работает
_http://www.сайт.ru/cooluser
 
а так не хочет.... плывет(((  
 
_http://www.сайт.ru/cooluser/
 
я так понимаю он просто теряет ссылки на css и images
 
как жестко закрепить это дело?  
 
Добавлено:
я так понимаю что-то типа символьных ссылок он должен генерировать

Всего записей: 138 | Зарегистр. 14-01-2005 | Отправлено: 14:09 02-12-2008
PEDKA



Улыбающийся КС
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Horor

Цитата:
будет, в зависимости от имени пользователя.

Будет или не будет?
 
Я к чему клоню. Если ты создашь страницу, а не пользователя, по адресу _http://www.сайт.ru/blablabla/, то скрипт будет искать пользователя, а не страницу.

----------
вот такая вот батва ©...
"Тестирование" это давно уже не помойка.
"Тестирование" это филиал "Помощи" ©

Всего записей: 15962 | Зарегистр. 04-05-2003 | Отправлено: 14:25 02-12-2008
Horor



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
не, за папки не волнуйтесь) названия их таковы что ни одному здоровому человеку не придет в голову так себя назвать.  
 

Цитата:
 
я сделал так:  
RewriteEngine On  
RewriteRule ^([A-Za-z0-9-]+)/?$ my.php?user=$1 [L]  
 
работает  
_http://www.сайт.ru/cooluser  
 
а так не хочет.... плывет(((  
_http://www.сайт.ru/cooluser/  
 теряет путь к CSS и папке с картингами.
 

 
как жестко закрепить, не тыкая в страницы кучу ссылок?  (довольно много исправлять придеться... или выхода нет?  
 
 
Добавлено:
в смысле закрепить CSS и папку с картингами

Всего записей: 138 | Зарегистр. 14-01-2005 | Отправлено: 14:42 02-12-2008
PEDKA



Улыбающийся КС
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Horor

Цитата:
я так понимаю он просто теряет ссылки на css и images

Использовать <base href />.

----------
вот такая вот батва ©...
"Тестирование" это давно уже не помойка.
"Тестирование" это филиал "Помощи" ©

Всего записей: 15962 | Зарегистр. 04-05-2003 | Отправлено: 18:04 02-12-2008
farik7



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Horor
Читай http://www.phpfaq.ru/path

Всего записей: 31 | Зарегистр. 05-10-2006 | Отправлено: 20:53 02-12-2008
Qwezar



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Проблема в следующем:
При использовании mod_rewrite, ссылки заменил с /?id=text на /text/, но как при этом запретить использование ссылок вида /?id=text ? Ведь они продолжают работать. Спасибо.

Всего записей: 360 | Зарегистр. 31-12-2006 | Отправлено: 13:22 03-12-2008
phpbbmods

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qwezar
проверяй strstr($_SERVER['REQUEST_URI'], "?id=")
ну а далее на 404 отправляй

Всего записей: 322 | Зарегистр. 09-02-2004 | Отправлено: 14:45 03-12-2008
sure777

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
этот топик уже читал и сейчас на всякий случай пречитал, но не могу вбиться в тему.допустим есть сайт site.ru там же каталог например Дима Билан.и как заставить чтоб в url отобразился именно http://site.ru/Дима Билан ?

Всего записей: 141 | Зарегистр. 25-03-2008 | Отправлено: 02:13 03-01-2009
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sure777
А в каком именно месте затруднения? Что там не то отобразилось?
Большинство современных браузеров кириллицу отобразят. Пробел, скорее всего, так и останется "%20".
 
P.S. А вообще, не давали ли бы вы реальным каталогам такие имена.. ;-)

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 02:54 03-01-2009 | Исправлено: ASE_DAG, 02:57 03-01-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