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


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

Открыть новую тему     Написать ответ в эту тему

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
Mavrikii

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

Цитата:
ранее открытие ссылки - так-же закрываются.

примеры, примеры.. без них вы говорите о своем, а собеседник о своем.

Всего записей: 4942 | Зарегистр. 20-09-2014 | Отправлено: 19:06 08-05-2015
Sutar



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

Цитата:
примеры

 

Код:
RewriteRule ^profile/$ user.php [NS,L]  
RewriteRule . - [R=404,L]

 
такой код, закрывает доступ к адресу ...site.ru/profile/
как и клюбому другому виду строки (кроме .../site.ru/)

Всего записей: 1140 | Зарегистр. 15-08-2011 | Отправлено: 00:00 09-05-2015
Mavrikii

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

Цитата:
такой код, закрывает доступ к адресу ...site.ru/profile/  

ай, такое ощущение, что я в детсаду - никакой самостоятельной инициативы

Код:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule . - [R=404,L]

Всего записей: 4942 | Зарегистр. 20-09-2014 | Отправлено: 00:18 09-05-2015 | Исправлено: Mavrikii, 00:18 09-05-2015
alfaservice



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!  
 
Подскажите как мне переделать правила htaccess из Вордпрес.
 

Код:
 
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

 
Как я понимаю, по правилу, все файлы и папки запрошенные в строке, редиректит на index.php. и соответственно поисковикам тоже не дает сканировать другие папки!  
Просто в корне worpress есть папка в которой находится форум не связанный с wordpress. физически расположить в другом месте не позволяет хостинг. Как папку открыть для индексации поисковыми ботами, на деле получается что форум не индексируется вовсе!

Всего записей: 153 | Зарегистр. 12-01-2007 | Отправлено: 19:32 12-05-2015 | Исправлено: alfaservice, 19:33 12-05-2015
Mavrikii

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

Цитата:
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  

переадресация идет только если папки или файла нет.
 

Цитата:
Как папку открыть для индексации поисковыми ботами, на деле получается что форум не индексируется вовсе!

выдается 403? ну так у вас запрещено создание списка файлов сервером. нужно либо самостоятельно генерить список файлов, либо добавить для нее  
 
Options Indexes

Всего записей: 4942 | Зарегистр. 20-09-2014 | Отправлено: 20:08 12-05-2015 | Исправлено: Mavrikii, 20:17 12-05-2015
alfaservice



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

Цитата:
выдается 403?

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

Код:
 
#    Mod_security can interfere with uploading of content such as attachments. If you
#    cannot attach files, remove the "#" from the lines below.
#<IfModule mod_security.c>
#    SecFilterEngine Off
#    SecFilterScanPOST Off
#</IfModule>
 
ErrorDocument 401 default
ErrorDocument 403 default
ErrorDocument 404 default
ErrorDocument 405 default
ErrorDocument 406 default
ErrorDocument 500 default
ErrorDocument 501 default
ErrorDocument 503 default
 
<IfModule mod_rewrite.c>
    RewriteEngine On
 
    #    If you are having problems with the rewrite rules, remove the "#" from the
    #    line that begins "RewriteBase" below. You will also have to change the path
    #    of the rewrite to reflect the path to your forum installation.
    #RewriteBase /forum
 
    #    This line may be needed to enable WebDAV editing with PHP as a CGI.
    #RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
 
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
</IfModule>
 

Всего записей: 153 | Зарегистр. 12-01-2007 | Отправлено: 21:10 12-05-2015
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alfaservice
содержимое robots.txt проверяли?  
 

Цитата:
#RewriteBase /forum  

для подпапки может потребоваться

Всего записей: 4942 | Зарегистр. 20-09-2014 | Отправлено: 21:23 12-05-2015
alfaservice



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

Цитата:
содержимое robots.txt проверяли?  

 
у меня сейчас нет robots.txt нигде  
 

Цитата:
#RewriteBase /forum

 
раскоментировал... посмотрю что получится

Всего записей: 153 | Зарегистр. 12-01-2007 | Отправлено: 17:44 13-05-2015
Mavrikii

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

Цитата:
у меня сейчас нет robots.txt нигде  

если в браузере открывается вам, значит и открывается (если не требуется авторизация) поисковику. далее уже нужно смотреть на детали не относящиеся к данной теме.

Всего записей: 4942 | Зарегистр. 20-09-2014 | Отправлено: 18:54 13-05-2015
alex0413



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Встретился с проблемой. У меня есть index.php у которого есть несколько параметров. Первый параметр method=..., остальные параметры могут быть разные. Как можно сделать такое перенаправление, что бы перейдя по ссылке site.ru/index.php?method=user.get&id=1 получали site.ru/user.get?id=1.
Пробовал онлайн генератор. Получил такое правило:

Код:
RewriteRule ^([^/]*)$ /index.php?method=$1 [L]

но это вызывает ошибку: Request exceeded the limit of 10 internal redirects due to probable configuration error.
На другом форуме подсказали вот такое:

Код:
RewriteRule ^([a-z.]+)\?(.+?)$ index.php?method=$1&$2 [L]
RewriteRule ^([a-z.]+)$ index.php?method=$1 [L]

но в таком случае method постоянно равен index.php, и, кажется, другие параметры не передаются, кроме самого method.

Всего записей: 139 | Зарегистр. 15-01-2011 | Отправлено: 23:14 16-05-2015
Mavrikii

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

Цитата:
но это вызывает ошибку: Request exceeded the limit of 10 internal redirects due to probable configuration error.  

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

Цитата:
что бы перейдя по ссылке site.ru/index.php?method=user.get&id=1

делаете RewriteCond на наличие нужного параметра
 
Вот так, к примеру
RewriteCond %{QUERY_STRING} ^method=(.*)&?(.*)
RewriteRule ^.* /%1?%2 [R=302,L]
 
R стоит если хочется перекинуть юзверя на "правильный" URL.
 
Ну и второе правило для преобразования данного запроса для запуска правильного скрипта.
 
RewriteCond %{REQUEST_URI} !^/?index.php
RewriteRule ^([^/]*)$ /index.php?method=$1 [L]
 
не проверял
 
ps: точнее даже так

Код:
RewriteCond %{QUERY_STRING} ^method=([^&]+)&?(.*)
RewriteRule . /%1?%2 [R=302,L]
 
RewriteCond %{REQUEST_URI} !^/?index.php
RewriteRule ^([^/]*)$ /index.php?method=$1 [L,QSA]

 

Цитата:
RewriteRule ^([^/]*)$

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

Всего записей: 4942 | Зарегистр. 20-09-2014 | Отправлено: 23:24 16-05-2015 | Исправлено: Mavrikii, 23:47 16-05-2015
alex0413



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

Код:
RewriteRule ^([a-z.]+)/?$ index.php?method=$1 [QSA]

Всего записей: 139 | Зарегистр. 15-01-2011 | Отправлено: 17:23 18-05-2015
Sutar



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

Код:
RewriteRule ^test(|/(|([0-9]+)))$ bay/$1.php?t=$3 [NS,L]
RewriteRule ^bay(.*)$ .$1 [R=404,L]

 
На сервере есть папка bay в которой есть файл test.php
Нужно закрыть доступ к папке и чтоб доступ к файлу через RewriteRule - был.
 
т.е. чтоб можно было открыть:
/test/23 и был открыт файл /bay/test.php?t=23
 
а если открыть так:
/bay/ так писало "Not Found"
 
В моем случае, в доступе закрыло как папку так и адрес через RewriteRule. (файл по таком адресу  /test/23 - не открывает. Пишет 404)

Всего записей: 1140 | Зарегистр. 15-08-2011 | Отправлено: 18:52 28-06-2015
Mavrikii

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

Цитата:
RewriteCond %{IS_SUBREQ}  f
RewriteRule ^bay(.*)$ .$1 [R=404,L]

Всего записей: 4942 | Зарегистр. 20-09-2014 | Отправлено: 20:43 28-06-2015
Sutar



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

Всего записей: 1140 | Зарегистр. 15-08-2011 | Отправлено: 13:04 29-06-2015
Mavrikii

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

Цитата:
не хочет(

весь код покажите.

Всего записей: 4942 | Зарегистр. 20-09-2014 | Отправлено: 19:22 29-06-2015
elektron



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как забанить Mozilla/4.0 (compatible; Synapse) ?
 
Вариант RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0.\(compatible\;\Synapse\) [OR] не помогает.

Всего записей: 239 | Зарегистр. 08-02-2003 | Отправлено: 08:34 24-08-2015
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
elektron
зачем экранировать точку с запятой?
к тому же у вас пробел написан в UA после точки с запятой, а в регулярке его нет.

Всего записей: 4942 | Зарегистр. 20-09-2014 | Отправлено: 09:22 24-08-2015
unreal666



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
и еще:
- разве ^Mozilla/4\.0.\(compatible\;\Synapse\) не надо заключать в двойные кавычки?
- [OR] разве работает в RewriteCond? Это же из RewriteRule.

Всего записей: 6486 | Зарегистр. 14-02-2005 | Отправлено: 10:19 24-08-2015
Mavrikii

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

Цитата:
не надо заключать в двойные кавычки?

не нужно
 

Цитата:
Это же из RewriteRule.

это, как раз, из условия

Всего записей: 4942 | Зарегистр. 20-09-2014 | Отправлено: 10:28 24-08-2015
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум Ru.Board » Интернет » Web-программирование » mod_rewrite: документация, готовые решения, вопросы

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru