Использование Apache-»фишек» mod_rewrite и htaccess считается чем-то недостижимым среди многих разочаровавшихся веб-мастеров, однако это одна из наиболее сложных задач, с которыми встречаются практически все веб-разработчики.
Хочу предложить вам простое решение вместо поиска более сложных для того, чтобы понять как работают mod_rewrite и htaccess. Большинство примеров использования, приведённые в этой статье могут быть просто скопированы и выгружены на ваш веб-сервер.
Чтобы не повторять одно и то же сотням других вебмастеров, я решил просто создать эту страницу-подсказку для всеобщего пользования.
Повторюсь, htaccess – это конфигурационный файл, который позволяет управлять веб-сервером Apache, mod_rewrite – это движок перезаписи, с помощью которого веб-сервер может модифицировать URL при их загрузке.
Файл htaccess – это текстовый файл, который имеет название .htaccess. Можно даже сказать, что это файл, состоящий только из расширения, потому как не содержит именной части (до символа «точка»). Обычно этот файл расположен в основной корневой директории вашего сервера, но вы также можете создавать отдельные файлы htaccess для различных директорий на своем сайте.
Самая простейший пример – сделать так, чтобы сайт не содержал ошибок канонизации для домашней страницы.
Множество веб-мастеров страдают от не очень хорошего ранжирования в поисковых системах из-за того, что существуют несколько версий URL домашней страницы, например:
http://www.site.com
http://site.com
http://www.site.com/index.html
http://site.com/index.html
Эти страницы выглядят как различные URL, несмотря на то, что они указывают на одно и то же содержание. Google в конечном итоге решит, какая из версий более правильная, но может пройти немало времени, а вы за это время можете поиметь лишние проблемы.
Чтобы решить эту проблему, просто добавьте следующие строки в свой htaccess-файл:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site.com
RewriteRule (.*) http://www.site.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.site.com/ [R=301,L]
Данный код позволит перенаправлять все возможные варианты домашней страницы на http://www.site.com.
Иногда вам необходимо использовать PHP-код на HTML-страницах статического сайта. Вместо того, чтобы перенаправлять все свои HTML-страницы на их эквивалентные PHP-версии, вам просто необходимо «сказать» своему серверу, что он должен парсить HTML-файлы как PHP.
AddHandler application/x-httpd-php .html
Данный код работает с любыми файлами, поэтому, если вы захотите создать динамические XML- или ASP-файлы, которые будут вести себя как PHP-файлы, вам просто нужно внести следующие изменения:
AddHandler application/x-httpd-php .xml
AddHandler application/x-httpd-php .asp
Пользовательские страницы ошибок могут быть легко настроены, например в CPanel (или DirectAdmin), но, если вы захотите настроить страницу ошибки через htaccess-файл, добавьте в него следующую строку:
# Обработка ошики 404 - Файл не найден
ErrorDocument 404 http://www.site.com/404.php
# Обработка ошики 403 - Доступ запрещен
ErrorDocument 403 http://www.site.com/403.php
Чтобы запретить роботу Google индексировать директории вы должны определить индексную страницу для необходимых директорий. Это не является обязательным на некоторых серверах.
DirectoryIndex index.php3
Я предпочитаю делать перенаправление на индексную страницу директории или другую подходящую страницу. Например, www.site.com/images/ может быть перенаправлен на www.site.com, а www.site.com/forum/ может быть перенаправлен на www.site.com/forum/index.php
Отличный пример использования htaccess для перенаправления одной страницы на другую:
redirect 301 /old-page.php http://www.site.com/new-page.php
Если вы хотите переключить ваш фид на сервис Feedburner, вам необходимо будет перенаправить свой текущий фид на новый адрес http://feeds.feedburner.com/blog-feed.
Перенаправление должно применяться для всех посетителей кроме робота Feedburner:
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^ваш-фид\.xml$ http://feeds.feedburner.com/blog-feed [R,L]
Если вы хотите запретить другим веб-сайтам напрямую ссылаться на изображения, расположенные на вашем сайте, но позволить поисковикам Google, Yahoo и MSN индексировать их, вам необходимо воспользоваться следующим кодом:
RewriteEngine on
RewriteCond %{HTTP_REFERER} .
RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)?site\. [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteCond %{HTTP_REFERER} !msn\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
RewriteCond %{REQUEST_URI} !^/hotlinker\.gif$
RewriteRule \.(gif|jpg|png)$ /hotlinker.gif [NC,L]
Изображение hotlinker.gif – это изображение, которое создано вами. Я предлагаю использовать что-то типа «Это изображение находится на сайте www.site.com» и ваш логотип.
Лично я разрешаю хотлинк, но использую определённое решение, которое использует сервис Google Images и сайты-хотлинкеры для получения ссылок на свой сайт.
Модуль перезаписи Apache в основном используется для превращения динамических URL вида www.site.com/product.php?id=123 в статические и дружественные пользователю вида www.site.com/product/123.
RewriteEngine on
RewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 [L]
Еще один пример, который приводит URL:
www.yoursite.com/script.php?product=123 к виду www.yoursite.com/cat/product/123/
RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2
Некоторые сайты ссылаются на ваш, добавляя строку запроса. Например, можно сослаться на ваш сайт, используя эту ссылку http://www.site.com/index.php?source=seoblog, просто для того, чтобы знать откуда приходит трафик. Это становится причиной появления дублирующегося содержания для вашего сайта, поэтому вам нужно настроить перенаправление на вашу домашнюю страницу:
RewriteCond %{QUERY_STRING} ^source= RewriteRule (.*) /$1? [R=301,L]
Пока все. Если есть, что добавить, прошу в каменты…
Pаспечатать эту статью
36 Responses
Wrecks
Ноябрь 5th, 2008 at 01:20
1Всё по делу, многим пригодится! А вот Канонизация в простонародье называется сшивкой домена.
chipp.ru - социальная сеть для умных блогеров
Ноябрь 5th, 2008 at 11:27
2Краткое руководство по htaccess и mod_rewrite…
Использование Apache-”фишек” mod_rewrite и htaccess считается чем-то недостижимым среди многих разочаровавшихся веб-мастеров, однако это одна из наиболее сложных задач, с которыми встречаются практически все веб-разработчики.
Хочу предложить вам прост…
Карина
Ноябрь 5th, 2008 at 17:01
3отлично! всё прекрасно описано, спасибо за этот пост
coder
Ноябрь 5th, 2008 at 21:52
4Просто супер! Статья вообще отличнейшая. Сразу же отменил у себя в ридере пометкой «важно». Думаю, что первый абзац описывает сущую правду, так как многие веб-мастеры (сори, включая меня) очень часто путаются в теме использованию «хтацеса».
Большое спасибо
HIMix
Ноябрь 5th, 2008 at 23:54
5Курть… Полезный пост… В закладочки… пригодится…
Спасибо =)
dc
Ноябрь 6th, 2008 at 14:35
6За перенаправление фида спасибо!
igor
Ноябрь 6th, 2008 at 15:28
7а как нужно изменить код Канонизации чтобы редирект шел на site.ru без www?
Bambino
Ноябрь 6th, 2008 at 18:26
8Igor, чтобы редиректитить на сайт без www, можно добавить пару строк:
baxymba
Ноябрь 9th, 2008 at 00:50
9У меня на сайте стоит в коде ссылка для запуска у посетителя клиента Skype для связи со мной: skype:sail_in_ukraine?chat
Сервер преобразует ее в ссылку:
http://www.sail.ho.ua/skype:sail_in_ukraine?chat
Можно ли отрегулировать в htaccess чтобы у посетителей срабатывал 1-й вариант?
Bambino
Ноябрь 9th, 2008 at 02:05
10baxymba, убери начальный слэш перед строкой в href, т.е.
Именно этот слэш «говорит» о том, что это страница относительно корня сайта и браузер не видит протокол skype:.
baxymba
Ноябрь 9th, 2008 at 11:47
11Bambino, в том-то и дело, что у меня в коде нет этого слеша! Это его сервер сам ставит! Я и спрашиваю, можно ли это отключить через .htaccess?
baxymba
Ноябрь 9th, 2008 at 12:09
12Методом ТЫКА сам нашел ответ: надо было просто убрать двойные кавычки в ссылке!
вызов Skype
Спасибо за помощь!
Bambino
Ноябрь 9th, 2008 at 19:37
13baxymba, да не может сервер сам ставить что-то.. Я имел в виду в этой ссылке
<a href="/skype:sail_in_ukraine?chat" rel="nofollow">убрать первый слэш:
<a href="skype:sail_in_ukraine?chat" rel="nofollow">P.S. Ну раз получилось, то все гут
Главное результат.
baxymba
Ноябрь 9th, 2008 at 22:48
14У меня в исходном коде в файле index.tpl нет этого слеша. Он вылазит откуда-то уже на сгенерированной странице.
Bambino
Ноябрь 9th, 2008 at 23:06
15Можешь показать кусок index.tpl?
Zaandr
Ноябрь 27th, 2008 at 16:41
16А можно ли сделать такой же запрет, как для хотлинка изображений, только не для картинок, а для файлов?
Bambino
Ноябрь 28th, 2008 at 10:33
17Для каких файлов?
Zaandr
Декабрь 10th, 2008 at 16:48
18Bambino
Для обычных архивов или файлов с расширениями отличных от изображений!
Bambino
Декабрь 13th, 2008 at 17:30
19Zaandr, просто добавь необходимые тебе расширения к списку в последней строке
Александр
Декабрь 23rd, 2008 at 23:24
20Файл htaccess – это текстовый файл, который имеет имя .htaccess. Точнее htaccess – это расширение файла, а не имя.
спасибо, повеселил.
Bambino
Декабрь 24th, 2008 at 11:45
21Пожалуйста, Александр. Веселитесь…
Alex
Январь 3rd, 2009 at 15:58
221)Товарищи возникла проблема и не знаю как решить.
У меня в корневом каталоге сайта есть папка в которйо находится рейтинг Адварк. Все участники рейтинга нормально переходят с сайта участника на рейтинг, а вот один сайт постоянно получает ошибку 403 и его переход не регистрируется.
2)Выше описан способ перенаправления всевозможных варианто.
Как мне нужно изменить код чтобы перенаправление было не на www, а без www? Тоесть не на http://www.fmmorpg.ru а на http://fmmorpg.ru
Я про этот код:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site.com
RewriteRule (.*) http://www.site.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.site.com/ [R=301,L]
Bambino
Январь 9th, 2009 at 23:26
23Alex:
1) смотри лог ошибок сервера. на кофейной гуще тяжело гадать.
2) как минимум заменить http://www.site.com на http://site.com
Дачник
Июль 5th, 2009 at 11:08
24Я в ПХП 0. Тут хоть поня для чего mod_rewrite. Благодарю.
Алексей
Июль 8th, 2009 at 09:18
25Мужики, я новичок в вэбе, но вот интуыцыя подсказывает что проблема именно в HTACCESS. Написал сайт на джумле, выставил там ЧПУ, и на моём компе всё работало как надо, а вот когда залил к провайдеру получилась странная штука: Нажимаю на пункт меню Услуги и брозер переходит на http://www.blog.com/index.php/services, ещё раз нажимаю – ту же ссылку переходит на http://www.blog.com/index.php/index.php/services
ещё раз – http://www.blog.com/index.php/index.php/index.php/services. Как это починить?
Bambino
Июль 9th, 2009 at 19:08
26Ну для начала поглядеть на содержимое .htaccess нужно…
Eugeneus
Июль 21st, 2009 at 17:00
27тут скорее надо поглядеть в configuration.php на предмет директивы $mosConfig_live_site
sip
Ноябрь 12th, 2009 at 18:13
28Есть файл .htacces
В него я вписал
Цитата:
AddType «application/x-httpd-php» .xs
в файл *.xs
Цитата:
ХТМЛ текс
вопрос №2
Возможно ли как нить убрать вообще расширение?
Примерно как в гуглях
http://www.google.ru/search
Там то какой то скрипт.. а не папка.
Bambino
Ноябрь 18th, 2009 at 15:24
29Можно. Что мешает сделать так:
RewriteRule ^searcg$ /search.php [L]А search.php – собственно скрипт.
EXEST
Январь 11th, 2010 at 17:32
30Привет.
у меня вот такая проблема в админку на движке (DLE) создаю какую-либо категорию
> затем вписываю адрес на категорию в (html)и сохраняю-обновляю, и
> при переходе по ссылке пишет (Ошибка. Ссылка не работает).
> Подскажите пожалуйста что делать. что вписавать в .htaccess
Bambino
Январь 14th, 2010 at 14:34
31Я не знаю тонкостей DLE и не очень понятно, какие категории, какие адреса…?
EXEST
Январь 16th, 2010 at 17:03
32А спасиб уже разобрался
Ivan
Март 12th, 2010 at 10:02
33Не могу разобраться, что прописать в htaccessб чтобы не было следующего:
Когда я открываю mysite.com/page?1
почему-то открывается mysite.com/page/?1
Как убрать последний слеш?
Bambino
Март 20th, 2010 at 12:54
34А пример сайта можно?
SEOshnik
Май 4th, 2010 at 14:54
35Подскажите какое правило нужно прописать в .htaccess чтобы сделать 301 редирект со старых адресов типа http://site.ru/index.php?newsid=248 на новые http://site.ru/248-super-puper-novost.html и наоборот. Конкретно для DLE. Сколько искал нигде на написано конкретное правило…
Bambino
Май 10th, 2010 at 10:50
36SEOshnik, к сожалению прописывать все придется вручную. Но мой тебе совет, не стоит этого уже делать, если не сделал раньше.
RSS feed for comments on this post
Не стесняйтесь, оставьте свое мнение...