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

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помощи разобраться в проблеме которую вот уже 2 дня не могу решить. Не буду описывать что я уже перебробовал, так как сам окончательно запутался....  
 
Проблема такова:  
 
На главной директории сайта www. moyaproblema.com есть папка  /MIKO где установлена CMS Nuka (php+MySql). В этой же папке есть HTACCESSS file c прописанными mod_rewrite rules дабы изменить динамические ссылки в статические. Если набрать в броузере www. moyaproblema.com/MIKO  то все работает , ссылки все статические и активные.  все линки HTML работают.  
 
Решил что лучше зарегитсрировать SUBDOMAIN   http://MIKO.moyaproblema.com, то есть сайт   CMS Nuka  установленная в папке /MIKO  будет иметь свой отделный URL !  
 
Как и полагается без задней мысли в Панели Управления моего аккаунта на сайте где нахидится мой хостинг я  зарегистрировал SUBDOMAIN   http://MIKO.moyaproblema.com  , где указал папку /MIKO как контент этого субдомейна.  
 
В результате  когда набираю в броузере http://MIKO.moyaproblema.com   то выдается исключительно  РНР  ссылки , как будто и нет  HTACCESS fila. Все запросы на HTML  ссылки  типа  http://MIKO.moyaproblema.com/index.html  выдают ошибку 404.  
 
В  главной директории  нет никакого  HTACCESS fila. HTACCESS файл  в  папке /MIKO  такой:  
:::::::::::::::::::::::::::::::::::::::::::::::  
<Files .ftaccess>  
deny from all  
</Files>  
 
# -------------------------------------------  
# Start of Auth  
# -------------------------------------------  
<Files .staccess>  
deny from all  
</Files>  
 
# deny most common except .php  
<FilesMatch "\.(inc|tpl|h|ihtml|sql|ini|conf|class|bin|spd|the me|module)$">  
deny from all  
</FilesMatch>  
 
<Limit GET PUT POST>  
Order Allow,Deny  
Allow from all  
</Limit>  
 
Options +FollowSymLinks  
<IfModule mod_rewrite.c>  
RewriteEngine On  
 
 
#The next lines check for Email Spammers Robots and redirect them to a fake page  
RewriteCond %{HTTP_USER_AGENT} ^Alexibot [OR]  
RewriteCond %{HTTP_USER_AGENT} ^asterias [OR]  
RewriteCond %{HTTP_USER_AGENT} ^BackDoorBot ..............  
 
RewriteRule ^index.html index.php [L]  
 
#Articles  
RewriteRule ^article-([0-9]*)-([a-z]*)-([0-9]*)-([0-9]*).html page.php?cool=News&that=article&fid=$1&mode=$2&ord er=$3&thold=$4 [L]  
..........  
</IfModule>  
:::::::::::::::::::::::::::::::::::::::::::  
 
Не смог найти решение этого вопроса. Почему  так www. moyaproblema.com/MIKO/index.html   все ОК а так  http://MIKO.moyaproblema.com/index.html   404  !  
 
Надеюсь что кто то знает ответ . Устал уже в этом разбираться .  
Спасибо заранее за любую помощь.

Всего записей: 35 | Зарегистр. 08-05-2003 | Отправлено: 01:08 14-08-2006
rovshan



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ответ нашел на другом форуме
 
надо вставить  
 
 
RewriteBase /
 
после  
 
RewriteEngine on
 
и все дела .

Всего записей: 35 | Зарегистр. 08-05-2003 | Отправлено: 03:43 15-08-2006
beaggy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как отрегулировать ЧПУ (russkie imena stranic - translitom)
 
Насколько я понял из изучения материалов в разных форумах, Человеко-Понятные URL создаются в файле .htaccess через MOD_REWRITE
 
Здесь в этой теме про MOD_REWRITE обсуждается много чего, это целый учебник. Но я-то - не программист. И мне нужна элементарная и понятная инструкция.
 
Подскажите, как сделать (где и что вписать), чтобы URL имели такой вид:
 
1) Страницы имеют расширение .html
 
2) Russkie imena stranic otobrazhajutsja translitom (volapukom, krakozyabroy), то есть в виде http://www.chtoto.ru/articles/psihologia/test_lushera.html вместо http://www.chtoto.ru/articles.php?group_id=психология&article_id=тест_люшера  
 
3) Имена страниц формируются из названия темы, введенной при заполнении формы сообщения.
 

Всего записей: 28 | Зарегистр. 31-05-2006 | Отправлено: 19:29 16-08-2006 | Исправлено: beaggy, 19:30 16-08-2006
Perf2k2

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет. Столкнулся с такой проблемой.  
 
Есть файл .htaccess следующего содержания:  

Код:
 
RewriteEngine On
RewriteBase /
RewriteRule ^progs/(.*).html$ progs.php?p=$1 [L]
 

 
Писал его сразу на хостинге, там все ОК работает. Как только пришло время на локальный сервак переносить, сразу появились проблемы. В Апаче (1.3.24) раскомментировал следующие строки:
 
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
 
Обращаюсь по УРЛУ www.domain.ru/progs/7.html, выдает "You don't have permission to access /progs/7.html on this server.".
 
Закомментил последние две строки в аксесе (RewriteBase, RewriteRule) - все-равно выдает такую же ошибку. Значит 100% дело не в правилах. А в чем же тогда дело?

Всего записей: 10 | Зарегистр. 12-05-2006 | Отправлено: 13:40 17-08-2006
Brodyaga



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

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 13:48 17-08-2006
N Sensey N



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ЧПУ
 
Вот что имеем
 
RewriteRule ^pf,([0-9]+)-.*\.html modules.php?name=Users&file=show_info&user_id=$1 [NC] [L]
 
Теперь - с этим вот работает:
 
http://domen/pf,1-blablabla.html
 
А вот если м ызасунем туда вопросительные знаки - уже не работает:
 
http://domen/pf,1-??????.html
 
Как побороть? Очень важно... копал гугль.. яндекс... не нашел ниче...

----------
sPaiz-Nuke - Free PHP CMS Web Design and Development Портал для израильтян

Всего записей: 1409 | Зарегистр. 01-10-2002 | Отправлено: 20:31 17-08-2006
DzOOMer

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

Цитата:
в логах апача обращение идет?

к сожалению я использую бесплатный хостинг, на котором нет возможности смотреть логи апача. Вернее в cpanel есть ссылка для закачки, но файл сохраняется нулевого размера.
 

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

вот html код ошибки при обращении к файлу:

Код:
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/0.3.46</center>
</body>
</html>

 

Цитата:
каким образом? не вижу RewriteCond

а он здесь нужен? основная идея использованиря реврайтера состоит в том, чтобы все запросы из папки /en/ слать в корень сайта. На локальном апаче(не денвер) под Linux все работает отлично без ошибок в логах.
 
ps
извиняюсь за задержку в ответе- был в отпуске.

Всего записей: 882 | Зарегистр. 16-11-2004 | Отправлено: 18:24 04-09-2006 | Исправлено: DzOOMer, 18:28 04-09-2006
Yamb



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как заставить работать mode rewrite для PHP файлов, причем если PHP установлен как CGI?
 
Добавлено:
P.S. cgi.fix_pathinfo=1 в php.ini не помогло

Всего записей: 532 | Зарегистр. 14-09-2003 | Отправлено: 01:55 24-09-2006
Cheery



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

Цитата:
Как заставить работать mode rewrite для PHP файлов, причем если PHP установлен как CGI?

объясни связь между mod_rewrite и PHP файлами?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:57 24-09-2006
Sky hawk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
собственно есть проблема (распространенная)
есть сайт - site.ru у него есть каталог ссылок, путь site.ru/links
нужно сделать чтобы субчик links.site.ru был ревалентин site.ru/links
об этом только я ленивый в сети не писал, но прочив весь форум так и не понял как сделать. больше всего непонял ли это сотворить имея клинтские права (т.е. к конфигам апача я прав не имею) я простой юзер.
может кто помочь в борьбе за правое дело?
спасибо.

----------
Волгоград в Фейсбуке
АвтоТвиттер
© каждый имеет мнение как хочет.

Всего записей: 2153 | Зарегистр. 31-10-2003 | Отправлено: 18:56 24-09-2006
Yamb



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Если PHP установлен как CGI то вся обработка идет через php.exe на PHP 4 и php-cgi.exe на PHP 5. Этим .exe файлам Apache передает ссылки на PHP файлы, такие как C:\Apache\home\site\page.php при вызове страницы page.php.
В случае использования mod_rewrite Apache начинает передавать ссылки на несуществующие файлы и получает "No input file specified." в ответ. Переменная SCRIPT_FILENAME оказывается пустой, а PHP использует эту переменную.
Подробно об этом тут http://bugs.php.net/bug.php?id=28227
Основная идея в том что  
In summary, PHP 4.3.6 should not be relying solely upon SCRIPT_FILENAME to determine if it's running as a CGI.
 
Кто еще сталкивался с подобной проблемой и решил ее конфигурированием?

Всего записей: 532 | Зарегистр. 14-09-2003 | Отправлено: 02:22 26-09-2006
vii



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sky hawk
Нужно иметь доступ к конфигу Апача и к DNS.

Всего записей: 446 | Зарегистр. 21-10-2004 | Отправлено: 17:58 26-09-2006
Sky hawk



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

Цитата:
Нужно иметь доступ к конфигу Апача и к DNS.

т.е. мне нужно обратится к хостеру с тем чтобы он что-там прписал. А потом мудрить хтацесс?
Спасибо,
Извенюсь за назойлевость.

----------
Волгоград в Фейсбуке
АвтоТвиттер
© каждый имеет мнение как хочет.

Всего записей: 2153 | Зарегистр. 31-10-2003 | Отправлено: 18:57 26-09-2006
Cheery



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

Цитата:
т.е. мне нужно обратится к хостеру с тем чтобы он что-там прписал.  

да

Цитата:
А потом мудрить хтацесс?  

httpd.conf
FAQ по Apache

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:59 26-09-2006
N Sensey N



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Странная фигня творится...
 
На локалке вот это
 
RewriteRule ^photo_sets.html$ modules.php?name=Photo_Sets [NC] [L]
 
Работает без проблем
 
А вот заливаю на сервер - ошибка 404
 
Экранирую точку  
 
RewriteRule ^photo_sets\.html$ modules.php?name=Photo_Sets [NC] [L]
 
то же самое....
 
А вот правила без точек.. что то типа
 
RewriteRule ^photo_sets(/)?$ modules.php?name=Photo_Sets [NC] [L]
 
работают на серваке на ура...
 
В чем может быть дело?

----------
sPaiz-Nuke - Free PHP CMS Web Design and Development Портал для израильтян

Всего записей: 1409 | Зарегистр. 01-10-2002 | Отправлено: 15:12 27-09-2006
vii



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

Цитата:
т.е. мне нужно обратится к хостеру с тем чтобы он что-там прписал. А потом мудрить хтацесс?  
Спасибо,  
Извенюсь за назойлевость.

Тебе нужно:
1. Чтобы тот, кто менеджит DNS для твоего домена, (зачастую это твой хостер, хотя и необязательно) прописал *.your_domain (или выборочно link1.your_domain, link2.your_domain, etc.) на нужный IP
2. Далее возможны 2 варианта:
2.1. Классический. Хостер в httpd.conf создает тебе отдельные виртуальные сервера для link1.your_domain (и т.п.) с директориями в твоих поддиректориях link1 (и т.п.)
2.2. Хитропопый (лично я не пробовал). Хостер в httpd.conf прописывает алиасы для твоего виртуального сервера *.your_domain (или опять же выборочно link1.your_domain, link2.your_domain, etc.). После этого ты в .htaccess (или же хостер в httpd.conf) прописываешь правила для mod_rewrite, как описано здесь.

Всего записей: 446 | Зарегистр. 21-10-2004 | Отправлено: 17:24 27-09-2006 | Исправлено: vii, 17:28 27-09-2006
diSmiSS

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помоги плиз готовым решением....
было http://forum.olddomain.ru/
стало http://newdomain.ru/forum/
Необходимо чтобы при запросах типа
http://forum.olddomain.ru/xxxx.php?id=3
переадресовавыло на
http://newdomain.ru/forum/xxxx.php?id=3
 
PS с регулярными выражениями не очень дружу . У самого получилось только это....
RewriteEngine on
RewriteCond %{HTTP_HOST} !^forum\.olddomain\.ru
RewriteRule (.*) http://newdomain.ru/forum/$1 [R=301, L]

Всего записей: 627 | Зарегистр. 13-04-2004 | Отправлено: 01:18 29-09-2006 | Исправлено: diSmiSS, 01:19 29-09-2006
diSmiSS

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

Код:
RewriteCond %{HTTP_HOST}   ^my\.domain1\.ru$ [NC]
RewriteRule ^(.*)$         http://domain2.ru/forum/$1  [L,R]

подскажите хоть где ошибка плиз......

Всего записей: 627 | Зарегистр. 13-04-2004 | Отправлено: 00:48 03-10-2006
Cheery



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

Цитата:
подскажите хоть где ошибка  

в чем она выражается?? включи логирование обработки и увидишь как все обрабатывается.
для твоих целей достаточно просто redirectmatch
http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:13 03-10-2006
Sky hawk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
vii
 
после общения с хостером, я пришел к выводу что проще взять VPS. Там как раз можно будет то что Вы мне посоветовали самому прописать имея root.
спасибо.

----------
Волгоград в Фейсбуке
АвтоТвиттер
© каждый имеет мнение как хочет.

Всего записей: 2153 | Зарегистр. 31-10-2003 | Отправлено: 22:06 05-10-2006
Открыть новую тему     Написать ответ в эту тему

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