Как исключить изображения из правила в .htaccess?

В файле .htaccess прописано правило

#убираем заглавные буквы из ссылок
RewriteCond expr «%> =

Как исправить его, чтобы оно не касалось изображений, стилей и скриптов на сайте? Т.е. если ссылка будет на ABC.js или IMG.css, или Qrt.jpg, то правило не срабатывало бы.

  • Вопрос задан 26 марта
  • 67 просмотров

Хозяйке на заметку: заглавные буквы в именах файлов считается дурной практикой в мире веб разработки, потому что почти всегда сайт будет работать на линукс сервере, файловая система которого чувствительна к регистру. Т.е. /ABC.js и /abc.js будут восприниматься линуксом как разные файлы. Строчные буквы, в свою очередь, стали стандартом в адресах ресурсов и очень высока вероятность того что на каком-то из этапов ввода или обработки адреса, регистр будет потерян, как, например, в вашем случае.

Поэтому вместо того чтоб решать проблему путём модификации .htaccess, правильнее будет привести все имена файлов в файловой системе к малому регистру. Тогда любые запросы будут приводиться к малому регистру и файлы будут гарантированно доступны. Такое решение применяется один раз является стопроцентным, в отличие от решения по поддержанию имён файлов в разных регистрах, за которое придется платить не один раз.

toster.ru

Htaccess. правило RewriteRule: просто, понятно, с примерами и объяснениями

Htaccess. правило RewriteRule: просто, понятно, с примерами и объяснениями
Мы, как веб программисты, часто сталкиваемся с файлом .htaccess и в частности с его модулем MOD_REWRITE и синтаксисом RewriteRule. И по началу трудно разобраться и понять принцип его работы, правила по которым он работает и механизм преобразования динамических ссылок в статические и наоборот. В этой статье я постараюсь максимально просто, максимально доступно, с объяснениями и примерами растолковать так, что бы у Вас не осталось каких либо вопросов.
За преобразование динамических ссылок в статические отвечает модуль mod_rewrite с синтаксисом RewriteRule, принцип работы и правило преобразования, которого я и буду объяснять.
Для примера возьмем динамическую ссылку, которую нам надо преобразовать:
site.ru/catalog/index.php?auto=BMW&model=X5&state=NEW&page=5
В этой ссылке мы включили максимально возможное количество передаваемых параметров на нашем сайте.
То есть, в каталоге выбрали авто BMW, модель X5, состояние – новое, страница 5.

В файле .htaccess, который мы разместим в корневой папке каталога catalog/ записываем (файл .htaccess действует только на каталог где он расположен и на его дочерние каталоги):
RewriteEngine on (включаем процесс преобразования ссылок)
RewriteRule ^([A-Za-z0-9-]+)/([^/]+)/(.*)/([0-9]+).html$ index.php?auto=$1&model=$2&state=$3&page=$4 [L]

Следует отметить, что данный мод преобразовывает ссылки не с динамической в статические ссылки а НАОБОРОТ! То есть, на сайте мы пишем статические ссылки, а мод рерайт преобразовывает статическую ссылку с сайта на динамическую. То есть представленную выше ссылку мы должны записать на сайте в виде статической:
site.ru/catalog/ BMW/X5/NEW/5.html
А модуль RewriteRule эту ссылку преобразовывает в динамическую по правилу записанному в .htaccess и выдает сайту:

Пример RewriteRule с пояснениями:
Допустим, у нас на сайте есть статьи, которые имеют динамические страницы:
http://www.site.ru/articles?id=( id статьи)
Сделаем, чтобы ссылка на наши статьи была более красива, например:
http://www.site.ru/nazvanie-stati/ или
http://www.site.ru/nazvanie-stati.html
Для этого, в нашей MySQL таблице, добавляем дополнительную строку, в которой будем хранить уникальное название статьи латинскими буквами без пробелов, слешов и специальных символов, недопустимых в ссылках. Например: Moya-pervaya-statya ну и по такому принципу. Назавем строку в нашей таблице, например eng_name_stati
Динамическая ссылка теперь будет иметь вид:
http://www.site.ru/articles?eng_name_stati=(Moya-pervaya-statya и т.д.)
Главный момент, который нужно понять, файл .htaccess, как я говорил выше, не преобразует динамические ссылки в статические, а наоборот, статические преобразовывает в динамические.
Правило преобразования RewriteRule будет иметь вид:
RewriteRule ^(.*)/$ articles?eng_name_stati=$1 [L] для вида статической ссылки: http://www.site.ru/nazvanie-stati/ или
RewriteRule ^(.*).html$ articles?eng_name_stati=$1 [L] для вида http://www.site.ru/nazvanie-stati.html
Теперь, когда мы введем ссылку http://www.site.ru/nazvanie-stati.html в браузере, мы попадем на нашу статью http://www.site.ru/articles?eng_name_stati=nazvanie-stati и эти обе ссылки будут рабочими. На нашем сайте мы просто ставим ссылки в статическом виде для поисковых систем. И когда люди заходят по статической ссылке, наш файл .htaccess преобразовывает ее в динамическую, понятную для нашего сайта и видную только ему.

Дополнение:

Бывает так, нужно сначала проверить, не является ли это ссылка на существующий файл на нашем сервере, например /catalog/webmaster/index.html может оказаться существующим файлом, но если эта ссылка попадет под соответствующее правило RewriteRule она согласно этому правилу преобразуется. Поэтому, если нам сначала нужно проверить, не является ли этот файл или директория прямая, нужно пред правилом RewriteRule написать условие если:

Если нет такой папки
Если нет такого файла
Выполнить преобразование

Выглядеть это будет так:

Где, RewriteCond – условие если, % – полный системный путь к запрашиваемому файлу или директории, Восклицательный знак ! означает отрицание не, -d – дериктория, -f – файл.

Теперь, прежде чем применить правило RewriteRule, будет проверено условие RewriteCond

P.S.: Так же по теме, может Вам будет интересно: Как сделать русскую URL как в Википедии

Почему Вы еще не прокомментировали?
Оставьте свой комментарий! Весь Интернет уже заждался!

Сударь Дядька говорит:

Здрастье
Есть такая задачка
Есть несколько субоменов вида host1.domen.ru, host2.domen.ru, host3.domen.ru проассоцииованные с соответствующими виртуалхостами в апаче
Есть главная страничка, открывающаяся по www.domen.ru
Нужно, что бы при открытии www.domen.ru/host1 перебрасывало на host1.domen.ru, ну и так далее по списку..
Причем сама адресная строчка http://www.domen.ru/host1 при этом меняться не должна.

Как это сделать? Подскажите, пожалуйста, граждане судари!

Здравстыуйте.
Помогите сделать правильное преобразование статических ссылок в динамические.

Например есть страница mysite.ru/tovars.php
на ней перечень товаров. При нажатии на любой из них появляется ссылка вида:
mysite.ru/tovars.php?t=name-tovara

Нужно чтобы эта страница открывалась по запросу:
mysite.ru/tovars/name-tovara.php

Первую часть вопроса решил вот таким правилом
RewriteRule ^(.*)/component/tag/(.*)$ http://www.site.com.ua/$1/tags/$2 [R=301,L]

Но как теперь сделать что
если переходишь по ссылке которой нет по адресу
http://www.site.com.ua/tags/имя2
http://www.site.com.ua/tags/имя3
http://www.site.com.ua/tags/имя4
и т.д.
шло бы перенаправление на
http://www.site.com.ua/tags/

Подскажите как сделать следующее правило
необходимо чтоб при обращении по адресу
www.site.com.ua/ru/component/tag/имя
переходил на www.site.com.ua/ru/component/tag/имя www.cultura.kh.ua/tags/ru/имя
вместо /ru/ есть еще /en/ /uk/

и чтоб при вводе адресов которых нет имя2 и т.д.
http://www.site.com.ua/tags/имя2
переходили все запросы на
http://www.site.com.ua/tags/

Добрый день! Помогите, пожалуйста! Как сделать чтобы вместо САЙТ/component/content/article/9-news/24-shedule-price было САЙТ/9-news/24-shedule-price, т.е. убрать /component/content/article . Заранее спасибо!

Ответ: Ели у Вас уже есть (действующий) сайт с ссылками: САЙТ/component/content/article/9-news/24-shedule-price а Вы хотите что бы была ссылка: САЙТ/9-news/24-shedule-price то очевидно Вам нужно заменить на всем сайте ссылки САЙТ/component/content/article/9-news/24-shedule-price на САЙТ/9-news/24-shedule-price и редиректом перенаправлять со старых ссылок на соответствующие новые. То есть:
RewriteRule ^component/content/article/9-news/(.*)$ 9-news/$1 [R=301,L]

Если знаете, подскажите пожалуйста.
Есть статик файл лежащий на фтп в виде
/flfg/ShowArticle.asp-ArticleID=84.php
Как сделать чтобы этот файл открывался по ссылке
site.ru/flfg/ShowArticle.asp?ArticleID=84

Т.е. банально нужно заменить — на ?

Если бы статик файл лежал не в папке /flfg/, то прекрасно все работало бы в таком виде:
RewriteCond % ^ArticleID=(.*)$
RewriteRule ^ShowArticle.asp$ ShowArticle.asp-ArticleID=%1.php [L,QSA]

Надо сделать 301 редирект

Исходный URL site.com/?id=1
Конечный URL site.com/index.php?id=1

По сути, нужно найти /? и заменить на /index.php?

Никак не могу реализовать, только на вас надежда)

Спасибо. Я сперва так и сделал без http_host, но меня стало редиректить к адресу прямо от корня веб-сервера -/home/site/public/ тра-ля-ля и так далее. Еще раз спасибо за статью. Без нее не разобрался бы.

Спасибо за статью.
Я ничего не понимаю в Rewrite. Но глядя на Ваши записи — немножко смог что-то написать.
Посмотрите, пожалуйста, мой пример:
Цель — 301 исправить лишь одно слово mashine на machine;
Например site.ru/catalog/mashine_1/ => site.ru/catalog/machine_1/ или
Например site.ru/catalog/mashine_mers_1/ => site.ru/catalog/machine_mers_1/

Расположение .htaccess — в корне веб-сайта;
Пример получился весьма длинный — уверен есть возможность сделать короче:
RewriteRule ^catalog/mashine_([A-Za-z0-9_] )/$ http://%/catalog/machine_$1/ [R=301,L]

Сейчас все работает, но не сделал ли я ничего лишнего, не перегнул ли палку. Или его как то можно упростить? Пожалуйста, критикуйте, если что-то не правильно. Заранее благодарен.

Ответ: Если Вы редиректите на этот же домен, % можно опустить:
RewriteRule ^catalog/mashine_([A-Za-z0-9_]+)/$ /catalog/machine_$1/ [R=301,L]

Здравствуйте! отличная статья — открывает глаза новичкам. Прописал правило:

RewriteRule ^([A-Za-z0-9-_] )/([A-Za-z0-9-_] )/([A-Za-z0-9-_] )$ svp.php?pn=$1

Князь Васин говорит:

Подскажите пожалуйста, как вот сюда еще редирект запихнуть?
RewriteRule ^(.*?)(.*?)/(.*)$ $1catalogue/$2?$3
Через [R] как то никак не получается

Ответ: Желательно написать реальный пример, откуда куда редиректить

Не совсем)Там я большое сообщение написал, но отобразилась только часть его. В любом случае проблема уже решена, еще раз спасибо за статью.

Класс, реально спасибо.
Оччень помогло в тяжелых буднях

Спасибо огромное за статью!
Но я, все же, не могу справиться со своей задачей.
Заменить группу правил:
RewriteCond % ^firma_kond=11$
RewriteRule ^split_systems_daikin.php /split_systems_daikin.php? [R=301,L]
RewriteCond % ^firma_kond=11$
RewriteRule ^cassette_conditioners_daikin.php /cassette_conditioners_daikin.php? [R=301,L]
RewriteCond % ^firma_kond=11$
RewriteRule ^channel_conditioners_daikin.php /channel_conditioners_daikin.php? [R=301,L]

на одно с использованием регулярных выражений:
RewriteCond % ^firma_kond=11$
RewriteRule ^(.*).php?(.*)$ /$1.php? [R=301,L]

Подскажите, пожалуйста, в чем ошибка.

Ответ: А так?
RewriteRule ^(.*)\.php /$1.php? [R=301,L]

Вообще, суть данного у тебя редиректа заключается в отлавливании GET переменной firma_kond=11 (и только! То есть на firma_kond=11&page=2 условие не сработает, я думаю ты понимаешь почему). При обнаружении: split_systems_daikin.php?firma_kond=11 срабатывает правило:
RewriteRule ^split_systems_daikin.php(обрати внимание знака конца строки $ нет, а это значит что может быть что угодно, в том числе и ?firma_kond=11) /split_systems_daikin.php?(так же обрати внимание, вопросительный знак в конце означает не передавать никаких GET переменных, то есть, ?firma_kond=11 отрубается) [R=301,L]

Принц Игорь говорит:

Спасибо за отличный материал. У меня вопрос. Есть сайт — (site.com), есть страница — (site.com/stranica.html), есть необходимость вывести эту страницу двумя ссылками, 1-вышеуказанной, 2-с добавлением преффикса (prefiks.site.com/stranica.html). Создал поддомен prefiks.site.com (папку почистил, что-бы не занимать место той-же инфой). Как сделать редирект, что-бы при открытии (в поисковиках) ссылки prefiks.site.com, переходило на prefiks.site.com/stranica.html

Ответ: Уточните вопрос, мне кажеться Вы хотите перенаправлять с site.com на prefiks.site.com ?

Спасибо огромное за статью! На теоретическом уровне всё встало на свои места, однако на практике возникли осложнения. Прописал в файле .htaccess правило:

RewriteEngine on
RewriteCond % !-f
RewriteCond % !-d
RewriteRule ^([A-Za-z0-9] )/([A-Za-z0-9] ).html$ index.php?category=$1

Ответ: RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)\.html$ index.php?category=$1 [L]
Так?

Спасибо за понятное разъяснение. Уже сколько лет занимаюсь сайтодельней, но с перенаправлениями приходится работать впервые. Ваша статья — лучшая!

Вроде нашел решение
RewriteCond % ^/wp/
RewriteRule ^wp/$ http://raikovstudio.ru/%1 [L,R=301]

У меня раньше сайт был в директории wp, потом был перемещен в корень. (глупость сделал конечно)
вот сейчас надо получается сделать так чтобы люди со старых ссылок http://mysite.ru/wp/?p=1 попадал на http://mysite.ru/?p=1
Не подскажете как сделать?

Ответ: Можно простым редиректом: RewriteRule ^wp/(.*)$ /$1 [R=301,L]

Спасибо за статью! Подскажите, как сделать чтоб ссылка НЕ заканчивалась расширением (.html) или слэшем?
То есть не так: nazvanie-stati.html
А так: nazvanie-stati

Спасибо, отличная статья, возник только вопрос по:
.html – означает что статическая строка оканчивается на .html
если «.» — означает любой символ, выходит что .html — означает что строка оканчивается на [любой символ]html ?

Ответ: Совершенно верно. Спасибо за то, что указали на этот недочет.
Разумно будет закомментировать точку, что бы она была не «любым символом», а именно точкой: \.html

Здравствуйте!
Может не по теме, у меня вопрос по RewriteRule но чуть другой.
shop — поддомен

поддомен находится здесь:
/public_html/shop

что изменить в коде что бы можно было разместить папку так
/shop

/shop — когда файлы тут, так на данный момент не работает

RewriteRule ^shop/ — [last]
RewriteCond % (www.)?shop.мойсайт.com [nocase]
RewriteRule (.*) shop/$1 [last]

Княгиня chooch говорит:

спасибо, самая подробно и понятно написанная статья по теме

Блин не входят большие комментарии

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

RewriteRule ^([a-zA-Z0-9_-] )/([a-zA-Z0-9_-] )/([a-zA-Z0-9_-] )$ $1/index.php?adl=$2

Администратор: Александр, для того, что бы не сбивались пути к файлам, всегда указывайте путь от корня сайта (начинайте ссылку со слеш): href=»/css/index.css»

Король Леонид говорит:

Огромное спасибо, три раза уже пытался разобратся с ЧПУ. Все форумы переситал но ничего не смог понять, птому как вся проблема в том что данный мод преобразовывает ссылки не с динамической в статические ссылки а НАОБОРОТ! А об этом никто ничего не пишет. Спасибо за разъяснение!

Огромнейшее спасибо за статью, всё то что нужно и понятно!

Князь великий сия земель Ветроподувайко говорит:

и 1 за величать в коментах) очень симпотно

Князь Ветроподувайко говорит:

Дякую! Змістовно і зрозуміло пояснено.

Сударь Александр говорит:

Спасибо за статью) все максимально просто и подробно расписано)

Купить часы Tommy Hilfiger у нас

Русский Вулкан — кажется, сейчас удача играет за вас!

rapidup.ru

Почему то на просторах рунета информация о локальной настройки веб-сервера Apache посредством конфигурационного файла .htaccess приводится как то не полно и однобоко. В основном приводятся примеры (часто не рабочие) или сухой перевод англоязычной документации.

А как же быть, если нужно настроить несколько редиректов, и совсем нет времени познавать всю мощь .htaccess? Единственный выход это брать готовые примеры, и наугад адаптировать под свои нужды. В этой статье я напишу краткое руководство по .htaccess, которое закроет большинство вопросов новичков. А также приведу ссылки на подробные инструкции. Эта статья будет дописываться по мере необходимости, начну с самого основного.

Редиректы осуществляются с помощью модуля mod_rewrite. Задаются правила преобразований в виде следующей конструкции:

Правила преобразования записываются в таком виде:

Строки RewriteCond — задают условия для срабатывания следующего за ними правила RewriteRule. Условий может быть несколько, они накладываются по правилу AND. Но можно изменить правило на OR с помощью флага OR.

В качестве [СТРОКИ ДЛЯ СРАВНЕНИЯ] могут использоваться различные переменные. Ссылка на полный список Я приведу только те, которые нужны чаще всего:

[УСЛОВИЕ] также как и [ШАБЛОН] представляют собой perl совместимое регулярное выражение, с некоторыми дополнениями, позволяющими например проверить файл ли это, или существующий url.

[ФЛАГИ] Флаги пишутся в квадратных скодках через запятую: [NC,OR]. Флаги для условий:

Подвыражения в регулярных выражениях (заключенные в скобки), доступны для вставки в [СТРОКУ ПОДСТАНОВКИ], обращаться к подвыражениям нужно так: %N — для подвыражений в условиях (RewriteCond) и $N — для подвыражений в правилах (RewriteRule), где N — порядковый номер подвыражения.

RewriteRule — правило подстановки. Если запрос подходит под вышестоящие проверки и [ШАБЛОН], то применяется правило подстановки. Здесь регулировать поведение также можно с помощью флагов. Флаги есть разные, приведу наиболее часто используемые:

Надеюсь после моего краткого ввода в теорию, вам будет проще понимать что же написано в вашем .htaccess. Привожу ссылку на очень хороший перевод про модуль mod_rewrite, там же можно найти другие хорошие переводы.

Внимание! Браузеры кешируют редиректы.

Причем обычные сочетания типа Ctrl+F5 или Ctrl+R не помагают. Я во время тестирования каждый раз открываю страницу в НОВОМ окне в режиме инкогнито. Причем старые страницы в режими инкогнито надо закрывать.

Универсальный редирект с www на без www

Тут самое интересное, почему то везде приводятся примеры, жестко привязанные к домену сайта. Зачем?, если есть универсальное решение:

Проверяем доменное имя, если оно начинается с www, то сработает правило: «все, на http://%1/$1«. Здесь %1 это наш домен без www (взят из условия), а $1 это адрес (взят из самого правила).

Универсальный редирект с без www на www

Тут маленько сложнее. Первое условие нужно для того чтобы получить домен (%1), оно всегда истина. Второе условие проверяет, что домен начинается не с www. Ну и само правило, аналогичное предыдущему примеру

Простой редирект

Для простого редиректа условия задавать не обязательно, только правило.

Реврайт без редиректа

Иногда требуется, чтобы был редирект без смены адреса, т.е. реврайт без редиректа. Для этого просто не указываем флаг редирект (R), и получаем желаемый результат, теперь по адресу news/happy получим news.html, а в адресной строке останется news/happy

Редирект от GET параметров

Например, нужно что бы со страницы /?action=page&id=15 был редирект на /page/15/:

Поясню, первым условиям проверяем что есть get параметр action=page, вторым условием проверяем что id равно числу. Эти условия нельзя объединять, т.к. параметры могут идти и наоборот, т.е. index.php?action=page&id=15 и index.php?id=15&action=page должны быть равноценны. Но и наконец правило, там все обычно, кроме знака вопрос (?) на конце. Он нам нужен, чтобы отсечь исходные GET параметры, иначе получим /page/15/?action=page&id=15

Редирект на мобильную версию сайта

Допустим, что мобильная версия расположена на поддомене m.site.ru. Будем переходить на мобильную версию только с главной страницы основного домена.

Первой строкой мы проверяем USER_AGENT, определяем что он относится к мобильникам. (эту строку я детально не проверял, взял на просторе интернета, возможно она не совсем корректная, или есть более универсальная строка. Но на моих мобильных устройствах этот пример работает)

Второй строкой проверяем что мы находимся на нужном домене (т.к. пример не универсальный)

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

Универсальная версия

Я люблю, чтобы все было универсально, чтобы один и тот же код работал на разных проектах без каких — либо правок. Для этого я переделал предыдущий пример:

Редирект с главной страницы

Речь идет про запрос типа site.ru (без site.ru/index.php)

Здесь оказалось не все так очевидно, я столкнулся с необъяснимым поведением.

Реврайт без редиректа (урл не меняется). Рабочий вариант:

Редирект. НЕ рабочий вариант:

Реврайт без редиректа (урл не меняется). НЕ рабочий вариант:

Редирект. Рабочий вариант:

Если мне кто — нибудь расскажет почему эти примеры работают крест накрест, а обратно не работают — буду очень рад.

бесполезная кнопка, которую еще никто не нажал:)
Нажали! Кнопку нажали уже 7 человек. Спасибо, очень мотивирует!

max22.ru

Blogerator.org

Эксклюзивные ИТ-новости, обзоры и интервью

25 правил .htaccess, которые должен знать каждый web-разработчик

Прежде чем мы начнем, обращаю ваше внимание на тот факт, что злоупотребление использованием .htaccess может привести к снижению производительности вашего сайта. Главное правило: использовать .htaccess для реализации той или иной задачи стоит только в том случае, если нет других вариантов.

Убедитесь в том, что вы сделали резервную копию оригинального файла .htaccess для вашего сайта, прежде чем вносить какие-либо изменения. Кроме того, помните — работоспособность указанных ниже правил зависит от индивидуальных настроек вашего web-сервера, заданных хостером. Некоторые директивы могут быть запрещены и не работать.

.htaccess (от. англ. hypertext access) — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.

Файл .htaccess может быть размещён в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).

Для того чтобы эти файлы .htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла (значение директивы AllowOverride должно быть установлено All). Как правило, подавляющее большинство хостеров разрешают использовать свои файлы .htaccess.

1. Запрещаем загрузку файлов с внешних сайтов

Вам надоели люди, которые размещают картинки, опубликованные на вашем сайте — на своих ресурсах, тем самым расходуя ваш траффик и создавая ненужную нагрузку на ваш хостинг? Данный код, размещенный в конце вашего файла .htaccess, позволит предотвратить загрузку ваших изображений — сторонними сайтами.

Не забудьте изменить site.com на ваше доменное имя и создать изображение stop.gif, которое будет показано вместо запрошенной картинки.

2. Блокируем все запросы от нежелательных User Agents

Это правило позволяет заблокировать нежелательные User Agent, которые могут быть потенциально опасными или просто перегружать сервер ненужными запросами.

Список User Agent браузеров, роботов и пауков поисковых машин, веб-каталогов, менеджеров закачек, спам-ботов и плохих ботов можно найти на сайте List of User-Agents.

3. Запрещаем доступ для всех, кроме указанных IP-адресов

Если по какой-либо причине, вы хотите запретить всем или разрешить только отдельным IP-адресам доступ к вашему сайту — добавьте этот код в ваш .htaccess-файл:

Не забудьте изменить domainname.com на ваше доменное имя.

4. Настраиваем SEO-Friendly 301 Redirect

Если вы перенесли доменное имя (или свой подсайт) или хотите перенаправлять пользователя на определенную страницу (страницы), без санкций со стороны поисковых машин, используйте этот код:

Не забудьте изменить site.com на ваше доменное имя, а /1/file.html и /2/file.html на соответствующие директории и страницы.

5. Создаем собственные страницы ошибок

Вам надоел стандартный вид страниц ошибок? Нет проблем — с помощью следующего кода, вы легко можете создать свою страницу и показывать пользователю именно ее:

Не забудьте создать в корневой директории вашего сервера папку error и разместить в ней соответствующие файлы.

6. Создаем черный список IP адресов

Устали от спам-комментариев или определенного пользователя? Просто заблокируйте его IP с помощью следующего кода, добавляемого в .htaccess-файл.

Узнать IP адреса комментаторов можно или в логах Apache или с помощью сервисов статистики. У многих CMS есть свои встроенные средства для мониторинга адресов посетителей. Например, в Drupal IP- адреса комментаторов можно увидеть в административной панели — Отчеты.

7. Устанавливаем e-mail адрес по-умолчанию для администратора

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

Не забудьте заменить default@domain.com — своим e-mail адресом.

8. Защищаем определенный файл

Нижеследующий код позволяет вам запретить доступ к любому файлу — при запросе будет выдаваться ошибка 403. Для примера я закрыл доступ к самому файлу htaccess, повысив общий уровень безопасности сайта.

9. Сжимаем элементы с помощью mod_deflate

В качестве альтернативы компрессии файлов с помощью Gzip, вы можете использовать mod_deflate (предположительно работает быстрее). Разместите следующий код в начале вашего файла .htaccess (также вы можете добавить перечисления .jpg|.gif|.png|.tiff|.ico):

10. Добавляем срок жизни в заголовки

Данный код позволяет добавить сроки жизни в заголовки:

11. Устанавливаем страницы по-умолчанию

Обычно страницей по-умолчанию является index.html, однако с помощью этого кода вы можете настроить по-умолчанию любую другую страницу.

12. Защищаем паролем папки и файлы

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

Для того, чтобы организовать доступ к файлу по паролю, необходимо создать файл .htpasswd и внести в него пару логин-пароль в формате user:password.

Однако в этом случае пароли будут хранится в открытом виде, что не слишком хорошо с точки зрения безопасности. Поэтому оптимальнее пароль зашифровать. Для этого воспользуйтесь сервисами генерации записей в файлы .htpasswd. Например, вот таким.

В нашем примере файл с паролями доступа лежит в корневой директории сайта и называется .htpasswd. Директория указывается от корня сервера и если путь будет некорректным — Apache, не получив доступа к файлу, откажет в доступе к папке любому пользователю — в том чилсе и тому, который ввел правильную пару логин:пароль.

13. Перенаправляем со старого домена — на новый

Используя .htaccess, вы можете настроить перенаправление со старого доменного имени на новое, добавив следующий код:

Перенаправление используется в том случае, если вы переносите свой существующий сайт на новое доменное имя. В этом случае любой пользователь, который наберет в адресной строке www.old.com — будет перенаправлен на www.new.com.

14. Усиливаем кеширование

Использование этого правила не означает прямое ускорение загрузки вашего сайта. Оно предназначено для более быстрой загрузки сайта — для уже заходившего на него посетителя, путем отправки статуса 304 для тех элементов, которые не обновлялись.

Таким образом, при повторной загрузке страницы браузер посетителя не будет заново скачивать изображения, скрипты или CSS, а выведет те файлы, которые уже хранятся в его кеше. Вы можете изменить срок жизни кеша, путем корректирования его значения в годах (year), месяцах (month) или, например — секундах (seconds). В примере указан 1 год.

15. Сжимаем компоненты сайта путем включения Gzip

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

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

16. Удаляем «category» из URL

Для изменения ссылки yourdomain.com/category/blue на yourdomain.com/blue, просто добавьте следующий код в конце вашего .htaccess файла.

Не забудьте изменить www.site.com на ваше доменное имя.

17. Запрещаем просмотр содержимого папки

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

18. Перенаправляем свою RSS-ленту на FeedBurner

Покажем как это можно сделать на примере RSS-ленты Drupal на сервис Google Feedburner.

Изначально необходимо зарегистрировать ленту своего блога в сервисе Feedburner. Далее не забудьте заменить yourfeed на имя вашей ленты уже в Feedburner.

19. Запрещаем комментарии от пользователей без Referrer

Чаще всего спам-боты обращаются напрямую к файлу комментариев, например к wp-comments-post.php, не заходя на страницы записей вашего блога. Приведенный ниже код позволяет заблокировать комментарии, отправленные пользователями, которые пришли «из ниоткуда», позволяя комментировать только тем читателям, которые перешли на страницу вашего блога с каких-либо других страниц (например, результатов поиска Google).

Не забудьте заменить yourblog.com на доменное имя вашего блога.

20. Убираем расширение файла из URL

Данный код позволяет удалить расширение файла .php (вы можете изменить его на любое другое, например — .html) из URL-адресов страниц.

21. Защищаем сайт

Данный код позволяет защитить сайт от scripts enjection и нежелательных модификаций _REQUEST и/или GLOBALS:

#Включаем отслеживание сим-ссылок Options +FollowSymLinks #Запускаем url_rewriting RewriteEngine On #Блокируем все ссылки, содержащие

23 комментария

Хорошая, удобная подборочка!

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

ОГОРОМНОЕ СПАСИБО ЗА МАТЕРИАЛЫ .HTACCESS

Прочитал и всё же не понял как сделать чтобы на моём сайте

был редирект со страницы

похоже данная проблема решается не на уровне htaccess, вопрос снят

Внимательно просмотрите пункт №2. Винегрет из 2-х разных принципов.

Подскажите как сделать редирект на особую страницу моего сайта page.php если например пользователь пришел с конкретного сайта site.com ?

Я понял, что нужно использовать переменную HTTP_REFERER в htaccess. Но что-то не получается. Привожу код из «.htaccess»:

RewriteRule ^(.*)$ /page.php [R=301,L]

Статья хорошая, но в п. 2 у автора есть ошибка env=bad_bot нигде не определен. Должно быть так:

SetEnvIfNoCase user-Agent ^FrontPage bad_bot [NC,OR]

Подскажите пожалуйста! Как отменить все правила для папки blog?

чтобы для папки блог применялись правила того аксесс который лежит в папке блог?

Можно ли с помощью этой программы поставить пароль на страничку на сайте, это нужно для защиты странички от детей до 18 лет. (Пороль просто покупается через онлайн перечисление). На этой страничке видеоклипы с эротикой. Пожалуйста подскажите, как это сделать, или с помощью другой программы или виджета? Спасибо

автор — извините — вы даун. (особенно позабавило про ваш 11 летний стаж программиста):

«п. 3. Запрещаем доступ для всех, кроме указанных IP-адресов

#Запрещаем доступ для всех, кроме указанных IP-адресов

ErrorDocument 403 http://www.domainname.com

Не забудьте изменить domainname.com на ваше доменное имя.»

если так сделать — все посетители, кроме указанных IP — как раз и будут попадать на ваш сайт (ваше доменное имя).

Который час бьюсь — бестолку. Достал из закладок сайт — перепрочел, но нимагу асилить. Мне надо из ссылки убрать ?category_id=31 (и 32 и 33 и пр.)

Все варианты не буду.

RewriteRule ^(.*)index.php$ http://%/$1 [R=301,L]

Будет время — помоги плиз!

Отличная статья, помогло, у меня все настройки лежат в /etc/apache2/apache2.conf других файлов .htaccess (в каждой папке) создавать не надо, да они и неработают

У меня в папки на хостинге www два файла .htaccess и после установки joomla 3.4 появился файл htaccess.txt

В .htaccess содержание следующей- # Use PHP5.4 as default

AddHandler application/x-httpd-php54 .php

В htaccess.txt содержание следующей-

# @copyright Copyright (C) 2005 — 2015 Open Source Matters. All rights reserved.

# @license GNU General Public License version 2 or later; see LICENSE.txt

# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!

# The line just below this section: ‘Options +FollowSymLinks’ may cause problems

# with some server configurations. It is required for use of mod_rewrite, but may already

# be set by your server administrator in a way that disallows changing it in

# your .htaccess file. If using it causes your server to error out, comment it out (add # to

# beginning of line), reload your site in your browser and test your sef url’s. If they work,

# it has been set by your server administrator and you do not need it set here.

## No directory listings

## Can be commented out if causes errors, see notes above.

## Mod_rewrite in use.

## Begin — Rewrite rules to block out some common exploits.

# If you experience problems on your site block out the operations listed below

# This attempts to block the most common type of exploit `attempts` to Joomla!

# Block out any script trying to base64_encode data within the URL.

# Block out any script that includes a tag in URL.

# Block out any script trying to set a PHP GLOBALS variable via URL.

# Block out any script trying to modify a _REQUEST variable via URL.

# Return 403 Forbidden header and show the content of the root homepage

RewriteRule .* index.php [F]

## End — Rewrite rules to block out some common exploits.

## Begin — Custom redirects

# If you need to redirect some pages, or set a canonical non-www to

# www redirect (or vice versa), place that code here. Ensure those

# redirects use the correct RewriteRule syntax and the [R=301,L] flags.

## End — Custom redirects

# Uncomment following line if your webserver’s URL

# is not directly related to physical file paths.

# Update Your Joomla! Directory (just / for root).

## Begin — Joomla! core SEF Section.

# If the requested path and file is not /index.php and the request

# has not already been internally rewritten to the index.php script

# and the requested path and file doesn’t directly match a physical file

# and the requested path and file doesn’t directly match a physical folder

# internally rewrite the request to the index.php script

RewriteRule .* index.php [L]

## End — Joomla! core SEF Section.

Подскажите как сделать правильно один файл .htaccess из этих двух файла

RewriteCond % !search?q=cache [NC]

RewriteRule .*\.(jpe?g|bmp|gif|png)$ files/images/nohotlink.jpg [NC,L]

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

Защита защитой, но нельзя забывать о том, что сайт строится в первую очередь для людей.

Нужен совет как выполнить задачу для отображения изображении в админе и на сайте. Дело в том, что вроде инсталляция прошла успешно, но фотки не отображаются и что-то меняет путь к файлам и также добавляет дополнительное имя этим фоткам, в виде чисел. Никак не смог самостоятельно решить проблему, подумал что возможно дело в правильном .htaccess.

Помогите пожалуйста решить проблему. У меня на сайте стоит флеш-баннер, который подгружается с чужого домена. В нем прописан код, который периодически перенаправляет посетителей на другой сайт. Дело в том, что он оплачен и я не могу его снять, но автор не предупредил о встроенном редиректе, а связаться с ним не получается 🙁

Можно запретить редирект с помощью .htaccess или еще как-то, но чтобы баннер остался как есть и подгружался с того же домена, так как там считаются показы?

blogerator.org