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

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



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

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 07:03 13-02-2012
ereklebu

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

Всего записей: 2 | Зарегистр. 12-02-2012 | Отправлено: 15:11 13-02-2012
Qwezar



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть сайт, который залит в папку site на сервере (http://my_site/site). При работе из корня, сайт работает нормально, но при работе из папки все пути в html коде ведут от корня, т.е. от домена. Как сделать, чтобы корнем была папка site?

Всего записей: 360 | Зарегистр. 31-12-2006 | Отправлено: 07:35 21-03-2012
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qwezar
Скорректировать настройку DocumentRoot в файле настроек апача

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 14:53 21-03-2012
Cheery



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

Цитата:
Скорректировать настройку DocumentRoot в файле настроек апача

я так понимаю, что нужно чтобы все было именно в папке.
 
Qwezar
есть способ - брать путь к запрашиваемому файлу, цеплять к нему путь к другой папке, проверять есть ли он там и если есть, то и "перекидывать" на него.  но, как я и сказал, неужели сложно заменить пути в кодах сайта?


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

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



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

Всего записей: 360 | Зарегистр. 31-12-2006 | Отправлено: 05:00 22-03-2012
Cheery



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

Цитата:
Ну это как вариант поправить во всех скриптах, стилях и шаблонах пути, просто думал может есть простой альтернативный вариант

так это не статика? и все пути прописаны в жестко, не через переменную?  
ну вообще то можно включать буферизацию ( www.php.net/ob_start ), после отработки скрипта брать код выводимой страницы из буфера и обрабатывать ссылки.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 05:06 22-03-2012
Qwezar



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

Код:
 
RewriteRule (.*) site/$1 [L]
 

то тогда сайт нормально открывается по адресу: http://my_site/site, но и в тоже время он открывается и по http://my_site/
 
Может можно как то переписать правило, чтобы открывался только по http://my_site/site ?

Всего записей: 360 | Зарегистр. 31-12-2006 | Отправлено: 05:57 22-03-2012
Cheery



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

Цитата:
Может можно как то переписать правило, чтобы открывался только

а как определите приходит запрос с одного URL или другого? только по рефереру, но ведь он может и не передаваться.

Цитата:
тогда сайт нормально открывается по адресу: http://my_site/site, но и в тоже время он открывается и по http://my_site/  

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

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 06:03 22-03-2012
Qwezar



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
Эта строка всегда перенаправляет запрос в папку site, если я даже http://my_site/qwe введу, все равно сайт откроется. Возможно вместо (.*) надо написать что то типо:

Код:
 
RewriteRule ^/site/$ site/index.php$1 [L]  
 

Но это не верно.

Всего записей: 360 | Зарегистр. 31-12-2006 | Отправлено: 06:18 22-03-2012
Shtef2009

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мир всем! Парни, нужна помощь по синтаксису файла .htaccess. Задача такая. Есть сайт (статический HTML). Нужно составить .htaccess таким образом, чтобы при попытке поискового робота проиндексировать любую страницу кроме *.htm (либо при попытке зайти с браузера на любую страницу, кроме *.htm) была переадресация на страницу 404, а именно http://site.ru/404. Сервер хостинга не отдает автоматом ошибку 404 при наборе несуществующего урла, в результате чего в индексе появилось несколько страниц с адресами типа /index.htm?=всякое_говно/
необходимо, чтобы индексировались только страницы вида *.htm. как задать такой редирект? Буду признателен за подсказку.

Всего записей: 16 | Зарегистр. 22-07-2009 | Отправлено: 07:35 31-03-2012
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shtef2009
а через Robots.txt пробовали это ограничить?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 08:04 31-03-2012
Shtef2009

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

Цитата:
а через Robots.txt пробовали это ограничить?

Через robots можно, в принципе, закрыть индексацию. Но мне нужно не просто чтобы страница не индексировалась, но чтобы была переадресация на 404

Всего записей: 16 | Зарегистр. 22-07-2009 | Отправлено: 09:07 31-03-2012
Laterport



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

Код:
 
 
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ $1.php
 

 
1. При написании адреса без "php", переход на неё осуществляется нормально и расширение не отображается в адресной строке, НО, при следующем переходе на сайте по ссылке, например сайт.ru/browse.php, расширение уже прописывается.  
 
2. Хочу чтобы для *.html, *.htm файлов выше описанное тоже распространялось. Подскажите пожалуйста код.  
 
Заблаговременно спасибо.  

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 11:20 11-04-2012 | Исправлено: Laterport, 11:45 11-04-2012
dacuan

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

Код:
RewriteEngine On  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_URI} \.(html|htm)$  
RewriteRule ^(.*)\.(html|htm)$ $1.php [NS,L]
 
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_URI} !\.php$  
RewriteRule ^(.*)$ $1.php [NS,L]

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 12:14 11-04-2012
Laterport



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

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 12:56 11-04-2012
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Laterport
Тогда традиционный вопрос. Что в логах реврайта?

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 13:43 11-04-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dacuan  
http://pastebin.com/k33DgwPF

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 14:18 11-04-2012
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Laterport
В логе нет ни одного обращения к *.html или *.htm. Что именно вы пытались сделать и как на это отреагировал апач?  
 
Приведенный мной код позволяет обращаться к скрипту вида some.php по URL'ам
http://example.com/some
http://example.com/some.php
http://example.com/some.htm
http://example.com/some.html
 
И все. Если это не то, что вам нужно, но опишите пожалуйста проблему подробнее.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 15:40 11-04-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dacuan
 
На сайте расположен только index.html и при написании просто /index, сервер сообщает об ошибке: Not Found The requested URL /test.php was not found on this server. Т.е. он пытается найти test.php,а не html. И по поводу моего первого вопроса я так и не понял, возможно ли сделать такое средствами реврайта?
 
Повторю вопрос.  
 При написании адреса без "php", переход на неё осуществляется нормально и расширение не отображается в адресной строке, НО, при следующем переходе на сайте по ссылке, например сайт.ru/browse.php, расширение уже прописывается.  

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 15:55 11-04-2012 | Исправлено: Laterport, 15:55 11-04-2012
Открыть новую тему     Написать ответ в эту тему

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