Трюки с htaccess: htaccess доступ, htaccess кодировка, htaccess запреты. htaccess примеры Htaccess закрыть доступ к корневой папке

Внимание!
Надеюсь, вы догадаетесь сделать копию существующего файла .htaccess , а уж потом будете производить свои эксперименты.
Если вам не понравится результат своего творчества, просто верните старый на место. Пусть это будет вспомогательный файл, перегруженный может тормозить сервер. Генератор.htaccess

.htaccess

Файл.htaccess содержит пользовательские настройки web-сервера и анализируется при каждом запросе на сервер.
На виртуальном хостинге чаще всего используется для:
  • паролирования директорий,
  • переадресации страниц,
  • настройки собственных страниц ошибок,
  • определения кодировки,
  • запреты и разрешения,
  • и др.
Это гибкая настройка веб-сервера Апач.
С помощью него можно переопределить многие директивы из файла httpd.conf (главный конфигурационный файл сервера Апач).
Если файл.htaccess расположен в корневой директории сервера, то его действия распространяется на весь сервер, кроме тех папок, где находится другой файл.htaccess.

Редактор

Создать файлы.htaccess можно в Блокноте или встроенном редакторе Far, WindowsCommander, TotalCommander.
Я его редактирую с Notepad++ или Akelpad, которые использую для написания этого сайта.

Кодировка

Как выставить русскую кодировку. AddDefaultCharset utf-8
Определение кодировки на определенные типы файлов AddType "text/html; charset=koi8-r" .html .htm .shtm Определение кодировки на загружаемые файлы CharsetSourceEnc utf-8 Отключение перекодировки если при загрузке скриптом не загружаются (бьются) бинарные файлы (картинки, архивы), создайте файл.htaccess и поместите его папку, где вы хотите отключить функцию, в нем пропишите строчку: CharsetRecodeMultipartForms off
AddDefaultCharset UTF-8

Назначение стартовой страницы. DirectoryIndex index.html Можно указывать несколько страниц. DirectoryIndex index.html index.php index.shtml map.html При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.

Разрешение/запрет

разрешить доступ с определенного ip. order allow deny
deny from all
allow from 000.000.000.000
запретить доступ с определенного ip. order allow deny
allow from all
deny from 000.000.000.000
запретить просмотр всем. deny from all разрешить просмотр всем. allow from all Запретить доступ к определенному файлу.
deny from all
Запретить доступ к файлам с определенным расширением.
deny from all
Запретить доступ к файлам нескольких расширений.
deny from all
? - любой одиночный символ
* - любая последовательность символов, исключая символ / (слеш). Тонкая настройка доступа. Есть каталог a1 и в нем два вложенных каталога a2, a3, введено 2 уровня пользователей. 1 группа имеет доступ только к a1 и a2, 2-я ко всем трем каталогам. Необходимо проводить аутентификацию только 1 раз - при доступе к a1, но при этом соблюдать права на доступ к а2 и а3.
Ник и пароль запрашиваются только при входе на а1 - если у юзера есть доступ на а2 пароль уже не запрашивается. Если на а3 доступа нет, вылетит табличка "введите пароль". www.site.ru/a1
www.site.ru/a1/а2
www.site.ru/a1/a3
a1 - общий и вместе с тем закрытый. а2 и а3 только для отдельных личностей. файл.htaccess для каталога а1: AuthName "Input password"
AuthType Basic


require valid-user

Файл.htaccess для каталога а2: AuthName "Input password"
AuthType Basic
AuthUserFile "/pub/home/login/htdocs/clousearea/.htpasswd"

require user юзер1 юзер2 юзер3
файл.htaccess для каталога а3: AuthName "Input password"
AuthType Basic
AuthUserFile "/pub/home/абв/htdocs/clousearea/.htpasswd"

require user юзер1 юзер4 юзер5

Перенаправление (редирект)

Пути к файлам и директориям должны указываться от корня сервера, например, /pub/home/server1/html/
В именах доменов обязательно должны быть указаны протоколы (http://, http://, ftp://) Если вы не знаете путь от корня сервера, то Вы можете его узнать, спросив у администратора сервера, либо можете посмотреть сами, запустив на сайте функцию PHP - phpinfo() . Она выведет на экран конфигурацию PHP в виде фиолетовых таблиц. В них Вам необходимо найти переменную doc_root и посмотреть ее значение - это будет путь от корня сервера до вашей основной директории. Перенаправление (редирект) только при запросе определенных страниц. Redirect /location/from/root/file.ext http://www.serv.ru/new/file/location.xyz /location/from/root/file.ext - это путь до корневого файла (до нужного файла). www.serv.ru/new/file/location.xyz это место, куда попадет пользователь сделав запрос на файл file.txt. Если файл лежит в корневом каталоге, то вместо location/from/root/ можно сразу поставить: /oldfile.html ну и если файл в субкаталоге, то будет выглядеть так: /old/oldfile.html Редирект на папку (напр. папка oldfolder). Redirect /oldfolder http://www.serv.ru/newfolder запрос на www.oldserv.ru/oldfolder/images/smile.gif ,
попадет на www.serv.ru/newfolder/images/smile.gif . Глобальное перенаправление (редирект) на другой адрес. Redirect / http://www.newsite.ru Перенаправление (редирект) только посетителей с определенным IP-адресом. SetEnvIf REMOTE_ADDR 192.145.121.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /only_for_you.html

Убираем WWW

Дело в том, что люди могут набирать адрес вашего сайта по-привычке с WWW. или экономя время без WWW.
Для Яндекса и Google http://your-site.com и http://www.your-site.com - разные сайты. И у вас, как следствие будет заниженный индекс цитирования. Это решается следующим кодом. Если вы хотите, чтобы ваш адрес был всегда с WWW. (привычнее), то код: RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{HTTP_HOST} ^your-site.com$
RewriteRule ^(.*)$ http://www.your-site.com/$1
Вместо your-site.com пишем свой адрес.

Пароль

Защита паролем. AuthName "Section Name" AuthType Basic AuthUserFile /full/path/to/.htpasswd Require valid-user Вам надо изменить для своего сайта. Например, поменять Section Name на своё название (к примеру - Members area). /full/path/to/.htpasswd - полный путь до файла.htapasswd (об этом чуть позже). Если вы не знаете полного пути, то обратитесь к системному администратору. Файл.htpasswd Чтобы защитить директорию паролем, надо создать файл содержащий логины и пароли, которым разрешено будет посещать сайт. И вписать в файл.htpasswd. Создание имен пользователей и паролей. Вписываем имена пользователей и пароли след. образом: username:password пароль (password) зашифрованная версия пароля.
Чтобы зашифровать.htpasswd файл, вам нужно будет воспользоваться готовым скриптом, или самому написать его. Если вам нужно несколько пользователей, то пишите построчно их. Как только вы заходите в защищенную паролем директорию, у вас всплывет pop-up окно для ввода логина и пароль. А можно просто вписать в поле адреса: username:[email protected]/directory

Ускоряем сайт с помощью gzip

Это сжатие уменьшает размер ваших файлов, и как следствие сокращает траффик у посетителя, ваш сайт быстрее открывается. Но это подойдет только для небольших и средний сайтов, потому что вы повышаете нагрузку на сервер. AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml
application/xhtml+xml text/JavaScript text/css application/x-JavaScript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0 no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html

Как заставить Апач обрабатывать SSI директивы? SSI позволяют "собирать" страницу из кусочков. В одном кусочке у вас код меню, в другом код верхней части страницы, в третьем - нижней. А посетитель видеть обычную страницу, которая состоит из того кода, который входит в ваши кусочки. Необходимы обязательные установки в httpd.conf:
В блоке, начинающемся с и заканчивающийся в строку Options Indexes добавьте Includes.
и после, в файле.htaccess пишем: AddHandler server-parsed .shtml .shtm .html .htm Чтобы пользователь не видел список файлов в папке, при отсутствии в ней индексного файла, добавим строчку: Options -Indexes Выполнение php кода в файлах с другим расширением. Иногда бывает полезно "обмануть" посетителя, выдавая ему свои php-скрипты или иные файлы, как html файлы. Реально используется для индексации поисковой системой Rambler php-скриптов. RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
Заметьте, так как файлам с расширением.html и.htm сопоставлено, что это файлы с гипертекстовой разметкой, то мы первой строкой убираем это сопоставление и добавляем обработку таких файлов php интерпретатором. При большой посещаемости сервера такие ухищрения могут вызвать тормоза. Спрашивайте у админа. Error 404 ... Если не будет файла, сообщающего об ошибке, то посетитель увидит содержимое вашего сайта, как в проводнике. Наверное, вы встречали картину подобную представленной ниже:
Можно создать специальный файл, где будут ссылки на ваш сайт, а не на хостера. Назвать его 404.html и поместить в корневую директорию.
Величина страницы с ошибкой должна быть больше 511 байтов, иначе Internet Explorer может показать собственную страницу с описанием ошибки. ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
ErrorDocument 401 /401.html
ErrorDocument 500 /500.html
Можно указать другой файл, который автоматически откроется при появлении ошибки.
Карта сайта - является идеальным файлом для обработки ошибки error 404 (файл не найден). ErrorDocument 404 /map.html register_globals Если у вас не работает почтовая форма, возможно не включен register_globals, тогда добавьте строчку: php_flag register_globals on Или php_flag register_globals off если вы хотите отключить.

ПРИНУДИТЕЛЬНАЯ ЗАКАЧКА ОПРЕДЕЛЕННЫХ ФАЙЛОВ

Можно некоторые файлы (MP3, EPS, XLS ...), предназначенные для скачивания принудительно скачивать, а не позволить браузеру решить, что делать. То есть, принять решение за него.
Этот фрагмент кода заставит загрузку и.xls файлы.eps с вашего сервера.




ForceType application/octet-stream
Header set Content-Disposition attachment

ЗАЩИТА ОТ ХОТЛИНКОВ

Хотлинк (hotlink) - это когда ставят прямую ссылку на ваше содержание с другого сайта.
Часто такая ситуация нежелательна, вы же не хотите оплачивать трафик другого сайта, и для ее избежания используется: SetEnvIfNoCase Referer "^http://www.test.com" local_ref=1
SetEnvIfNoCase Referer "^http://test.com" local_ref=1

Order Allow,Deny
Allow from env=local_ref
Другой вариант: RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$
RewriteRule .*\.(gif|jpg)$ - [F]

RewriteCond %{HTTP_REFERER} !.*/foo-with-gif\.html$
RewriteRule ^inlined-in-foo\.(gif|jpg)$ - [F]
Еще вариант: RewriteEngine On
#Replace ?mysite\.com/ with your blog url
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/
RewriteCond %{HTTP_REFERER} !^$
#Replace /images/nohotlink.jpg with your "don"t hotlink" image url
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

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

Чтобы запретить доступ ко всему сайту, необходимо в файле.htacces написать следующее:



Запретить доступ только с конкретного ip-адреса:


deny from all
order allow deny
deny from all
deny from ip_адрес_пользователя


"ip_адрес_пользователя " необходимо заменить на конкретный ip-адрес.

Чтобы разрешить доступ только с конкретного ip-адреса, можно написать:


order allow deny
deny from all
allow from ip_адрес_пользователя


Так же с помощью файла.htaccess можно запретить доступ к конкретному файлу. Например, запретим доступ пользователей к самому файлу.htaccess. При этом сервер сможет использовать инструкции, указанные в файле:


< Files .htaccess >
order allow,deny
deny from all

Защита файлов

Наверное, всем пользователям интернета попадались одинаковые статьи на различных сайтах. Очень часто бывает, что эти статьи попросту сворованы с других ресурсов. Поисковые системы стараются бороться с дублированными страницами, но выбор ими первоисточника не всегда оказывается верным. И это является серьезной проблемой для копирайтеров и веб-мастеров, так как на написание качественного контента, порой, уходит большое количество сил и времени, и очень неприятно обзавестись штрафными санкциями поисковиков за то, что кто-то скопировал контент с Вашего сайта. А зачастую, вместе с текстом воруют так же и изображения. Причем, многие воры, чтобы не перегружать свой сервер, не скачивают изображение с чужих сайтов, а просто ссылаются на файлы, находящиеся на сайте-первоисточнике. Вставка ссылки на файл, находящийся на другом сайте называется хотлинком (hotlink). Помимо ссылок на изображения этого могут быть так же ссылки и на другие файлы, например, доступные для скачивания. Такие хотлинки не только крайне неприятны для автора контента. Они так же перегружает сервер первоисточника.

Защитить файлы от хотлинка при помощи файла.htaccess можно добавив в него две строчки:



ваш_сайт.ru .*$


В скобочках через символ "|" указаны расширения файлов, доступ к которым будет запрещен всем, за исключением сервера и пользователей сайта ваш_сайт.ru

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


RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?ваш_сайт.ru
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yandex.ru
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yahoo.
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google.
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?bing.
RewriteRule \.(jpe?g|bmp|gif|png|css|zip|pdf|txt|doc)$ -

Защита паролем

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


AuthName "What do you want? "
AuthType Basic
AuthUserFile
require valid-user


Файл.htaccess, содержащий эти строки необходимо поместить в директорию, доступ к которой мы хотим закрыть. При попытке пользователя зайти на соответствующий раздел сайта сервер отдаст код статуса 401 (требуется авторизация) и выведет окно с полями для ввода имени пользователя и пароля и сообщением "What do you want?", указанным в директиве "AuthName" (допускаются только латинские символы и цифры).

Имена пользователей и пароли хранятся в файле.htpasswd. Путь к этому файлу задается в директиве "AuthUserFile".

Важно: путь к файлу.htpasswd указывается абсолютный, от корневого каталога сервера.

Чтобы узнать путь к.htpasswd, который необходимо указать в.htaccess, можно создать файл php, содержащий:


< ?php echo $_SERVER["DOCUMENT_ROOT"]; ? >


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

Установить пароль на конкретный файл можно следующим образом:


< Files file.txt >
AuthName "It"s not for all"
AuthType Basic
AuthUserFile /home/сервер/ваш_сайт.ru/pass/.htpasswd


Пароль на группу файлов:


< Files "\.(sql)$" >
AuthName " It"s not for all "
AuthType Basic
AuthUserFile /home/сервер/ваш_сайт.ru/pass/.htpasswd


В данном случае все файлы, имеющие расширение.sql будут доступны только по паролю.



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

Как редактировать.htaccess

Как заблокировать доступ к сайту для всех

Чтобы полностью закрыть доступ к сайту, допишите в.htaccess :

deny from all # Запрещает доступ к сайту всем IP адресам

Как разрешить доступ к сайту только определенному IP

Чтобы полностью закрыть сайт для всех IP кроме одного, допишите в.htaccess :

deny from all # Запрещает доступ к сайту всем IP адресам allow from XXX.XXX.XXX.XXX # Открывает доступ для указанного IP. Если IP много, разделяйте их пробелом.

Как запретить доступ к сайту только определенному IP

Чтобы полностью закрыть доступ к сайту для одного IP, допишите в.htaccess :

deny from XXX.XXX.XXX.XXX # Закрывает доступ для указанного IP. Если IP много, разделяйте их пробелом.

Как управлять доступом к определенному файлу

Если вы хотите, чтобы для разных файлов на сайте были разные настройки доступа, вы можете воспользоваться командой . Например, чтобы закрыть доступ к файлу wp-config.php для всех, кроме вас, допишите в.htaccess :

order deny,allow # Определяет порядок исполнения других команд. Сейчас allow выполняется после deny. deny from all # Запрещает доступ к файлу всем IP адресам allow from XXX.XXX.XXX.XXX # Открывает доступ для указанного IP. Если IP много, разделяйте их пробелом.

Таким же образом можно закрыть доступ и к самому.

Набирая адрес в строке браузера, вы получаете на свой компьютер файлы, которые отображает браузер. Управление тем, какие файлы и как вам показывать (пересылать) осуществляет веб-сервер . Наиболее популярных серверов два: IIS и .

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

Это файл гибкой настройки веб-сервера Апач. «Гибкий» обозначает, что как только вы поменяли что-то в этом файле, изменения тут же вступают в силу. С помощью него можно переопределить многие директивы из файла httpd.conf (этот файл является главным конфигурационным файлом сервера Апач и его действия распространяются полностью на всех пользователей данной копии Апача). В случаях, когда у вас нет доступа в файлу настройки Апача (тот же виртуальный хостинг), вам поможет именно этот файл.

Этот файл не доступен веб-пользователю из браузера. Если файл.htaccess расположен в корневой директории сервера, то его действия распространяется на весь сервер, кроме тех папок, где находится другой файл.htaccess (и кроме всех папок «ниже» этой папки со вторым.htaccess ).

Структура ваших директорий на сервере такая:

|-user | | | -user1 | | | -user2 | |-data | | | -data1 | | | -data2 |

Директории user1 и user2 будут вложенными по отношению к директории user . Если мы поместим в директорию www файл.htaccess , то его действие будет автоматически распространяться и на директории user1 и user2 .

В директорию data помещаем другой файл.htaccess , по-сравнению, с тем, что находится в директории user . И для директорий data1 и data2 будет действовать файл.htacсess, находящийся в data.

.htaccess (с точкой в начале имени) - это файл-конфигуратор Apache-серверов, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу (apache/conf/httpd.conf). Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок. .htaccess представляет собой обычный текстовый документ, расширение которого htaccess. Данный файл обычно находится в корне сайта, однако Вы можете создавать и дополнительные.htaccess-файлы для различных директорий Вашего сайта.

Mod_rewrite - модуль, используемый веб-серверами для преобразования URL"ов.

Если вы хотите вести логи всех операций, выполненных с помощью mod_rewrite, можно активировать это с помощью следующей записи в httpd.conf:

RewriteLog /usr/local/apache/logs/mod_rewrite.log RewriteLogLevel 1

Директивы модуля Mod_rewrite

Наиболее часто используемые параметры

%{REQUEST_URI} Строка запроса (без доменного имени, и GET параметров), пример "/server/htaccess/"
%{HTTP_HOST} Доменное имя, например "max22.ru"
%{QUERY_STRING} Строка GET параметров

Варианты реализации Редиректа с помощью файла.htaccess

  1. Простой редирект:
    Redirect 301 / http://www.domainname.ru/ или redirect /secret http://www.site.ru/nosecret или # с использованием регулярного выражения RedirectMatch 301 .* http://www.site.ru/?.htaccess или httpd.conf для Apache. Первый "/" означает, что всё с верхнего уровня сайта, включая все подкаталоги, будет переадресовано (не забывайте поставить последний "/"). Если Вы хотите переадресовать только страницу, сохранив PR старой страницы, можно сделать так:

    Redirect 301 /old/old.htm http://www.you.ru/new.htm где:
    /old/old.htm - путь и имя старой страницы
    http://www.you.com/new.htm - новый путь и новое имя перемещенной страницы

  2. Редирект на любую страницу по ip пользователя или при запросе конкретной страницы (а также по маске имени).
    Если у пользователя ip 192.152.37.125, то он будет перенаправлен на страницу user.php: SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR="redir" RewriteCond %{REDIR} redir RewriteRule ^/$ /user.php
  3. Редирект при запросе определённых файлов. Если запрашиваются файлы, расширение которых не указано в файле.htaccess (gif и jpg), то следует перенаправление: RewriteEngine On RewriteRule !.(gif|jpg)$ index.php
  4. Использование mod_rewrite:
    Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^yourdomain\.ru RewriteRule ^(.*)$ http://www.yourdomain.ru/$1
  5. Редирект с регулярным выражением:
    RedirectMatch 301 (.*) http://www.yourdomain.ru$1 Прописывается в файле.htaccess. (.*) RedirectMatch фактически соответствует регулярным образцам выражения после доменного имени. Таким образом, нельзя выполнить соответствие образца на ^/yourdomain.ru. Однако, можно преобразовать страницы с использованием.html расширения к файлам того же самого названия, но с.php расширением: RedirectMatch 301 (.*)\.html$ http://www.yourdomain.ru$1.php Если необходимо сделать различное перенаправление для отдельных страниц, можно использовать следующее: RedirectMatch Permanent ^/html/resources.html$ http://www.newdomain.com/resources.php RedirectMatch Permanent ^/html/other_page.html$ http://www.newdomain.com/other_page.php RedirectMatch Permanent ^/(.*)$ http://www.newdomain.com/ "RedirectMatch Permanent " - это эквивалент "RedirectMatch 301", строка с "*(Wildcard)" должна быть последней в этом списке.
  6. Создание удобо читаемых URL
    Чтобы преобразовать, например, www.site.ru/product.php?id=123 в www.site.ru/product/123 следующим образом: RewriteEngine on RewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 [L] В следующем примере преобразуем www.site.ru/script.php?product=123 в www.site.ru/cat/product/123/: RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2
  7. Редирект на PHP:
    header("HTTP/1.1 301 Moved Permanently"); header("Location: http://www.newdomain.ru/newdir/newpage.htm"); exit(); Естественно, надо создать страницу, при обращении к которой и будет происходить Редирект, и разместить её на сервере. И лучше укажите HTTP/1.1 (а не HTTP/1.0 или HTTP/0.9, которые не поддерживают виртуальный хостинг)
  8. Редирект всех файлов в папке на один файл.
    Например вы больше не нуждаетесь в разделе сайта Super discount и хотите перенаправить все запросы к папке /superdiscount на один файл /hot-offers.php. Для этого добавляем в.htaccess следующий код. RewriteRule ^superdiscount(.*)$ /hot-offers.php
  9. Редирект всей папки кроме одного файла
    В следующем примере все файлы из папки /superdiscount будут редиректится на на файл /hot-offers.php, КРОМЕ файла /superdiscount/my-ebook.html котоый должен редиректится на /hot-to-make-million.html RewriteRule ^superdiscount/my-ebook.html /hot-to-make-million.html RewriteRule ^superdiscount(.*)$ /hot-offers.php
  10. Редирект динамического URL на новый файл.
    Данный вариант пригодится если вы хотите редиректить динамический URL с параметрами на новый статический файл. RewriteRule ^article.jsp?id=(.*)$ /latestnews.htm То есть теперь, запрос к файлу вида http://www.kass.ws/article.jsp?id=8632 и/или http://www.kass.ws/article.jsp?id=1245 будет отправлен на файл http://www.kass.ws/latestnews.htm.
  11. Массовый редирект новых файлов.
    Тепепь перейдем к самому сложному моменту, когда вам надо редиректить массу URL-ов, например после смены вашей CMS. Тут сразу возникает ряд проблем. Во-первых, внесение всех изменившихся адресов в.htaccess файл займет очень много времени, да и само по себе занятие малоприятное. Во-вторых, слишком много записей в.htaccess файле будут тормозить Apache сервера. И в третьих, при внесении такого количества информации высока вероятность, что вы где то ошибетесь. По этому, самый лучший выход, это нанять програмиста который вам напишет динамический редирект.
    Нижеприведенный пример написан на PHP, но так же может быть выполнен на любом языке. Предположим вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый id должны быть средирекчены. Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа. old_id INT new_url VARCHAR (255) Далее пишем код который свяжет ваши старые id с новыми URL-ами
    После этого, добавляем следующую строчку в.htaccess: RewriteRule ^/product-(.*)_(+).php /redirectold.php?productid=$2 затем создаем PHP файл redirectold.php, который будет поддерживать 301 редирект:

    Теперь все запросы к вашим старым URL-ам будут вызывать redirectold.php, который найдет новый URL и вернет 301 ответ с вашей новой ссылкой.

    Редиректы в зависимости от времени

    Когда нужно применять уловки типа содержания зависящего от времени масса вебмастеров все ещё используют CGI скрипты которые производят редиректы на специальные страницы. Как это может быть сделано через mod_rewrite?

    Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения STRING и =STRING мы можем производить редиректы зависящие от времени: RewriteEngine on RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700 RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900 RewriteRule ^foo\.html$ foo.day.html RewriteRule ^foo\.html$ foo.night.html

    Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html.

  12. Убираем у всех запросов в начале "WWW."
    RewriteEngine on # оглашаем, что хотим использовать mod_rewrite RewriteCond %{HTTP_HOST} ^www\.(.*) RewriteRule ^/?(.*) http://%1/$1

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

  13. Убираем у всех запросов в конце index.php. Переадресуем на страницу без index.php

    Поисковые системы плохо относятся к дубрям страниц. Чтобы этого избежать нужно удалить(склеить) страницы вида http://ваш_домен/ и http://ваш_домен/index.php

    RewriteCond %{THE_REQUEST} ^.*/index.php RewriteRule ^(.*)index.php$ http://%{HTTP_HOST}/$1

  14. Меняем расширение .html на .php
    Иногда бывает так, что у Вас статичный веб-сайт, а Вам необходимо, чтобы на нем срабатывал какой-нибудь php-скрипт. Для этого Вам необходимо сказать серверу, чтобы он обрабатывал эту страницу как php-файл. AddHandler application/x-httpd-php .html Этот прием можно использовать и для других расширений файлов: AddHandler application/x-httpd-php .xml AddHandler application/x-httpd-php .asp

Запрещение доступа в конкретную директорию

  1. для всех ко всем файлам в директории: deny from all
  2. к конкретному файлу: deny from all
  3. по ip пользователя: order deny,allow deny from all allow from 192.152.37.125 Доступ в данную директорию будет разрешён только пользователю с ip 192.152.37.125.

    А если хотите наоборот, запретить отдельным ip пользователям доступ к вашему сайту, то пропишем следующие строчки:

    order allow,deny allow from all deny from 192.152.37.125 deny from 123.456.177

  4. Директива Options -Indexes - запрет на отображение содержимого каталога при отсутствии индексного файла Иногда нужно сделать так, чтобы в случае отсутствия в каталоге файла, который показывается по умолчанию, не выдавался список файлов в каталоге. Тогда можно добавить в.htaccess такую строчку: Options -Indexes В этом случае вместо списка файлов в каталоге посетитель получит HTTP ошибку 403 - access forbidden.
  5. Запретить доступ к файлам с несколькими типа расширений
  6. deny from all

    Запрещен доступ к файлам с расширением *.inc, *.conf и *.cfg. Хотя директива, по умолчанию, не работает с регулярными выражениями, но их можно включить поставив символ тильды(~) в опциях директивы. Синтаксис следующий:

    [тильда] [пробел] [далее_все_без_пробелов] Чтобы блокировать этот доступ, запишем следующее: RewriteRule ^.htaccess$ - [F] Это правило переводится так:
    Если кто-то пробует обращаться к файлу.htaccess, система должна произвести код ошибки "HTTP response of 403" или "403 Forbidden - You don"t have permission to access /.htaccess on this server".

    Конструкция ^.htaccess$ в этом регулярном выражении означает:
    ^ - якорь начала строки
    $ - якорь конца строки
    . - в регулярных выражениях точка "." обозначает мета-символ и должна быть защищена обратным слэшем (backslash), если Вы все-таки хотите использовать именно фактическую точку.

    Имя файла должно быть расположено точно между начальным и конечным якорем. Это будет гарантировать то, что только это определенное имя файла и никакое другое, сгенерирует код ошибки.
    [F] - специальный "запрещающий" флажок (forbidden).
    - не учитывать регистр букв.
    - означает "или следующее условие".

Определение кодировки

Определение кодировки, в которой сервер "отдает" файлы

AddDefaultCharset windows-1251 варианты: KOI8-R , UTF-8 , Windows-1251

Определение кодировки на загружаемые файлы

CharsetSourceEnc windows-1251

Установка пароля на директорию с помощью.htaccess

Для установки пароля на директорию можно воспользоваться системой базовой авторизации, предусмотренной в веб-сервере Apache. Создаем в каталоге, к которому хотим ограничить доступ по паролю, файл.htaccess с такими директивами: AuthType Basic AuthName "Some Name" AuthUserFile /www/some_login/www/htdocs/some_dir/.htpasswd require valid-user Путь /www/some_login/www/htdocs/some_dir/.htpasswd обозначает полный путь к файлу паролей на диске нашего сервера. Если, например, вы поместите файл.htpasswd (в нем будут пароли) в домашний каталог, куда вы попадаете, зайдя на сервер по FTP, то путь к этому файлу будет иметь вид /www/some_login/www/htdocs/some_dir/.htpasswd, где some_login - Ваш логин. В директиве AuthUserFile указываем абсолютный путь к файлу с логинами/паролями, который мы создадим чуть позже. Если вы создаете файл.htaccess на своем компьютере, а не сразу на сервере используя текстовый редактор, обратите особое внимание на то, что.htaccess должен передаваться по FTP строго в текстовом (ASCII) режиме.

Создаем файл паролей. Файл с паролями должен содержать строки вида login:password. Пароль должен быть зашифрован с использованием алгоритма MD5. Один из способов создать такой файл - воспользоваться программой, входящей в поставку Apache - htpasswd (на нашем сервере она находится в каталоге /usr/local/apache/bin, полный путь - /usr/local/apache/bin/htpasswd).

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

Htpasswd -mbc .htpasswd user1 7B1safkir - создаем новый файл.htpasswd, в который добавляем запись для пользователя user1 с паролем, указанным в командной строке. htpasswd .htpasswd user2 - добавляем в уже существующий файл.htpasswd пользователя user2, а пароль вводим вручную в ответ на соответствующий запрос программы.

После окончания заведения всех логинов файл нужно загрузить на сервер.

О других способах установки паролей на страницу

Задаем собственные страницы ошибок

Задать собственную страницу ошибок можно следующим образом: ErrorDocument 404 http://www.site.ru/404.php IE игнорирует страницы размером меньше 512 байт.

Индексация директорий и поддиректорий

Чтобы избежать индексации поисковыми системами директорий и поддиректорий, необходимо прописать такую строку, к примеру: DirectoryIndex index.php Эта директива задает файл, который будет вызван при обращении к директории без указания имени файла.

Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.

DirectoryIndex index.html index.php index.shtml

Лично я предпочитаю переадресовывать с пустых директорий либо на главную страницу сайта, либо на какую-либо другую подходящую страницу. Например, директорию www.site.ru/pic/ можно переадресовать на www.site.ru.

Защита изображений от скачивания

Очень часто бывает, что веб-мастера нагло копируют контент с Вашего сайта вместе с рисунками, причем рисунки подгружаются с Вашего же сервера. Это создает лишний трафик, что, зачастую, приводит к ряду проблем. Как же защититься от таких веб-мастеров и не помешать поисковым роботам индексировать изображения? Все просто: RewriteEngine on RewriteCond %{HTTP_REFERER} . RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)?site\. RewriteCond %{HTTP_REFERER} !google\. RewriteCond %{HTTP_REFERER} !search\?q=cache RewriteCond %{HTTP_REFERER} !msn\. RewriteCond %{HTTP_REFERER} !yahoo\. RewriteCond %{REQUEST_URI} !^/hotlinker\.gif$ RewriteRule \.(gif|jpg|png)$ /hotlinker.gif hotlinker.gif - изображение, которое будет отображаться, вместо истинных изображений. Рекомендую в этом изображении отобразить Ваш логотип и ссылку на Ваш сайт.

Еще один варинат запрета доступа к картинкам с неразрешенных сайтов:

SetEnvIfNoCase Referer "^$" local_ref=1 SetEnvIfNoCase Referer "^http://(www\.)?htmlweb\.ru" local_ref=1 SetEnvIfNoCase Referer "^http://(www\.)?images\.yandex\.ru" local_ref=1 SetEnvIfNoCase Referer "^http://(www\.)?hghltd\.yandex\.com" local_ref=1 Order Allow,Deny Allow from env=local_ref

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

RewriteCond %{HTTP_USER_AGENT} (Googlebot|Slurp|spider|Twiceler|heritrix| Combine|appie|boitho|e-SocietyRobot|Exabot|Nutch|OmniExplorer| MJ12bot|ZyBorg/1|Ask\ Jeeves|AskJeeves|ActiveTouristBot| JemmaTheTourist| agadine3|BecomeBot|Clustered-Search-Bot| MSIECrawler|freefind|galaxy|genieknows|INGRID|grub-client| MojeekBot|NaverBot|NetNose-Crawler|OnetSzukaj|PrassoSunner| Asterias\ Crawler|T-H-U-N-D-E-R-S-T-O-N-E|GeorgeTheTouristBot| VoilaBot|Vagabondo|fantomBro wser|stealthBrowser|cloakBrowser| fantomCrew\ Browser|Girafabot|Indy\ Library|Intelliseek|Zealbot| Windows\ 95|^Mozilla/4\.05\ \$|^Mozilla/4\.0$) RewriteRule ^(.*)$ - [F] # RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* RewriteCond %{HTTP_USER_AGENT} ^Opera.* RewriteCond %{HTTP_USER_AGENT} ^Firefox.* RewriteCond %{HTTP_USER_AGENT} ^Netscape.* RewriteRule ^(.*)$ - [L] RewriteRule ^(.*)$ - [F]

Отслеживание обращений к файлу robots.txt

Чтобы иметь больше информации о посещении поисковиков, полезно иметь подробную информацио об обращении к файлу robots.txt Для того, чтобы оганизовать это, в ".htaccess" должны быть следующие записи: RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteRule ^robots.txt$ /robot.php?%{REQUEST_URI} Теперь при запросе файла "robots.txt" наш RewriteRule переадресует посетителя (робота) к обрабатывающему запросы скрипту robot.php. Кроме того, переменная передается скрипту, которая будет обработана в соответствии с вашими нуждами. "REQUEST_URI" определяет имя запрашиваемого файла. В данном примере это - "robots.txt". Скрипт прочтет содержание "robots.txt" и отправит его web-браузеру или роботу поискового сервера. Таким образом, мы можем считать хиты посетителей и вести лог-файлы.

PHPSESSID

Для отключения добавления PHPSESSID к URL вставьте в начало index.php:

Ini_set("session.use_trans_sid", 0);

Либо в.htaccess пропишите:

Php_flag session.use_trans_sid Off

Если вам все это показалось сложным, воспользуйтесь готовым сервисом преобразования динамических URL в статические с помощью htaccess

Директивы кеширования

Кэширование для всех типов файлов по времени доступа ExpiresActive on ExpiresDefault "access plus 600 seconds" Кэширование для всех типов файлов по времени изменения ExpiresActive on ExpiresDefault "modification plus 600 seconds" Кэширование для определённых типов файлов ExpiresByType text/css "modification plus 600 seconds" ExpiresByType image/jpeg "modification plus 600 seconds" ExpiresByType image/gif "modification plus 600 seconds" ExpiresByType image/x-ico "modification plus 600 seconds" ExpiresByType image/png "modification plus 600 seconds"

Запрет кеширования с помощью сервера Apache

Откройте файл конфигурации сервера Apache httpd.conf и раскомментируйте следующие строчки:

LoadModule expires_module modules/mod_expires.so LoadModule headers_module modules/mod_headers.so ... AddModule mod_expires.c AddModule mod_headers.c

Впишите в.htaccess следующее:

# Запрещение кеширования в этой папке # Необходимо включение модулей # mod_headers.c и mod_expires.c # # Заголовок Cache-Control Header append Cache-Control "no-store, no-cache, must-revalidate" # Заголовок Expires ExpiresActive On ExpiresDefault "now"

Необходимые заголовки будут передаваться автоматически, и специально их писать в PHP уже не нужно - кэш уже выключен!

Описание http-заголовка кеширования Cache-control

Кеширование с помощью файла.htaccess

# Разрешение кеширования в этой папке # Необходимо включение модулей # mod_headers.c и mod_expires.c # ExpiresActive on #ExpiresDefault "access plus 1 hours" #ExpiresDefault "access plus 10 years" ExpiresDefault "access plus 1 month" ExpiresByType text/cache-manifest "access plus 0 seconds" ExpiresByType text/html "access plus 0 seconds" ExpiresByType text/xml "access plus 0 seconds" ExpiresByType application/xml "access plus 0 seconds" ExpiresByType application/json "access plus 0 seconds" ExpiresByType application/rss+xml "access plus 1 month" ExpiresByType image/x-icon "access plus 1 week" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType video/ogg "access plus 1 year" ExpiresByType audio/ogg "access plus 1 year" ExpiresByType audio/mp3 "access plus 1 year" ExpiresByType video/mp4 "access plus 1 year" ExpiresByType video/webm "access plus 1 year" ExpiresByType text/x-component "access plus 1 month" ExpiresByType font/truetype "access plus 1 year" ExpiresByType font/opentype "access plus 1 year" ExpiresByType application/x-font-woff "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 year" ExpiresByType text/css "access plus 2 months" ExpiresByType application/javascript "access plus 2 months" ExpiresByType text/javascript "access plus 2 months" Header append Cache-Control "public"

Кеширование javascript файлов с помощью файла.htaccess

ExpiresDefault "access plus 3 days"

Будьте осторожны при кешировании, т.к. при изменении файла, пользователь может получить новый вариант только через 3 дня!

Как заставить html-страницы обрабатывать php-код?

Пропишите в своем файле.htaccess следующие строки: RemoveHandler .php .htm .html AddHandler application/x-httpd-php .php .htm .html

Как разместить несколько сайтов на одном виртуальном хостинге?

Чтобы разместить два или более сайтов на одном виртуальном хостинге, вопреки отведенному вам тарифным планом количеству доменов необходимо в файле ".htaccess" прописать следующие строки:

RewriteEngine On RewriteRule ^newdirectory/ - [L] RewriteCond %{HTTP_HOST} (www.)?newdomain.ru RewriteRule (.*) newdirectory/$1 [L]

Где:
newdirectory/ - папка, в которой будет лежать второй сайт
newdomain.ru - домен, для которого мы делаем перенаправление

Обратите внимание, что при этом у Вас будет единый почтовый аккаунт. Т.е. если, у Вас существует ящик [email protected], то после подключения домена newdomain.ru у ящика [email protected] появляется второе имя - [email protected]. А при создании любого нового ящика (например info), ему автоматически присваиваются два имени - [email protected] и [email protected].

Поиск страниц больше чем в одном каталоге

Иногда необходимо позволить веб-серверу искать страницы больше чем в одном каталоге.

RewriteEngine on # во-первых попытаемся найти это в указанном месте/... # ...и если нашли то заканчиваем поиск: RewriteCond /your/docroot/dir1/%{REQUEST_FILENAME} -f RewriteRule ^(.+) /your/docroot/dir1/$1 [L] # во-вторых - попытаемся найти это в pub/... # ...и если нашли то заканчиваем поиск: RewriteCond /your/docroot/dir2/%{REQUEST_FILENAME} -f RewriteRule ^(.+) /your/docroot/dir2/$1 [L] # иначе продолжаем для других директив RewriteRule ^(.+) -

Виртуальные хосты пользователей

Если Вы хотите предоставлять адреса www.subdomain.domain.ru для страниц пользователей, Вы можете использовать следующий набор правил для преобразования http://www.subdomain.domain.ru/path во внутренний путь /home/subdomain/path:

RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.[^.]+\.ru$ RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^www\.([^.]+)\.ru(.*) /home/$1$2

Повреждаются файлы при загрузке на сервер

Если при передаче файлов через формы (при указанном enctype="multipart/form-data") бинарные данные повреждаются, пропишите в /cgi-bin/.htaccess директиву: CharsetRecodeMultipartForms Off.

Ошибка загрузки SWF файлов.
Ошибки при обращении к страницам, содержащим ключевые слова,
типа $_REQUEST

Такое может происходить из-за установленного модуля в Apache. По умолчанию он блокирует в запросах строки с SQL аргументами и другими потенциально опасными командами.

Возможные сообщения об ошибке:

Forbidden

You don"t have permission to access /adm/index.php on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Запрос небезопасен и был отвергнут.

Добавьте в.htaccess SecFilterEngine Off SecFilterScanPOST Off Для сообщения:

"POST /wp-admin/async-upload.php HTTP/1.1" 406 354 "-" "Shockwave Flash"

Можно снять защиту только на загрузку файлов на сервер: SecFilterEngine Off SecFilterScanPOST Off

Оптимально снимать защиту только с той папки, в которой это необходимо, не убирая защиту со всего сайта.

Переменные сервера

Это переменные вида %{NAME_OF_VARIABLE}

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

Эти переменные полностью соответствуют названным похожим образом MIME-заголовкам HTTP, и переменным сервера Apache или полям struct tm систем Unix. Те, что являются для mod_rewrite специальными включают:

IS_SUBREQ - Будет содержать текст «true» если запрос выполняется в текущий момент как подзапрос, «false» в другом случае. Подзапросы могут быть сгенерированны модулями которым нужно иметь дело с дополнительными файлами или URI для того чтобы выполнить собственные задачи.

API_VERSION - Это версия API модуля Apache (внутренний интерфейс между сервером и модулем) в текущей сборке сервера, что определено в include/ap_mmn.h. API версия модуля соответствует используемой версии Apache (для версии Apache 1.3.14, к примеру это 19990320:10), однако это в основном интересно авторам модулей.

THE_REQUEST - Полная строка HTTP запроса отправленная браузером серверу (т.е., « GET /index.html HTTP/1.1 »). Она не включает какие-либо дополнительные заголовки отправляемые браузером.

REQUEST_URI - Ресурс, запрошенный в строке HTTP запроса.

REQUEST_FILENAME - Полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу.

Примечания:

  1. Переменные SCRIPT_FILENAME и REQUEST_FILENAME содержат одинаковые значения, т.е., значение поля filename внутренней структуры request_rec сервера Apache. Первое имя это просто широко известное имя переменной CGI в то время как второе это постоянная копия REQUEST_URI (содержащая значение поля uri структуры request_rec).
  2. Есть специальный формат: %{ENV:переменная} где переменная может быть любой переменной окружения. Это ищется во внутренних структурах Apache и (если там нет) с помощью вызова getenv() из процесса Apache сервера.
  3. Есть специальный формат: %{HTTP:заголовок} где заголовок может быть любым именем HTTP MIME-заголовка. Это ищется в HTTP запросе. Пример: %{HTTP:Proxy-Connection} значение HTTP заголовка « Proxy-Connection: ».
  4. Есть специальный формат %{LA-U:переменная} опережающих запросов которые производятся внутренним (основанном на URL) подзапросом для определения конечного значения переменной . Используйте это когда вы хотите использовать переменную для преобразований, которая реально определяется позднее, в какой-либо фазе API, и таким образом недоступна на данном этапе. Для примера когда вы хотите преобразовать соответственно переменной REMOTE_USER из контекста сервера (файл httpd.conf) вы должны использовать %{LA-U:REMOTE_USER} потому что эта переменная устанавливается в фазах авторизации которые идут после фазы трансляции URL в которой и работает mod_rewrite. С другой стороны, по причине реализации работы mod_rewrite в контексте каталога (файл.htaccess) через Fixup фазу API и из-за того, фазы авторизации идут до этой фазы, вы просто можете там использовать %{REMOTE_USER} .
  5. Есть специальный формат: %{LA-F:переменная} который создает внутренний (основанный на имени файла) подзапрос для определения конечного значения переменной . В основном это то же самое что и формат LA-U приведенный выше.

Главная страница без дублирования

Обычно код главной страницы физически расположен в файле index.html или index.php, но сайт должен открываться по любому из запросов: yoursite.ru, yoursite.ru/index.html, www.yoursite.ru и www.yoursite.ru/index.html. Но для поисковых систем это четыре разных URL! Если не настроить.htaccess верно, поисковик добавит в свой индекс четыре одинаковых страницы. Это признак некачественного сайта. Избежать этой проблемы можно с помощью такого кода в.htaccess:

Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^yoursite.ru RewriteRule (.*) http://www.yoursite.ru/$1 RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.html\ HTTP/ RewriteRule ^index\.html$ http://www.yoursite.ru/

Все страницы-дубли будут склеены редиректом с кодом с главной страницей – http://www.yoursite.ru/.

Дубли страниц без слэша в конце URL

Чтобы предотвратить ситуацию с индексированием страниц www.yoursite.ru/about и www.yoursite.ru/about/ как разных, ставим следущий код:

Со страниц без слэша будет установлен редирект на «слэшевые».

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ /$1/

Сохранение(загрузка) файлов вместо открытия

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

AddType application/octet-stream .rar .doc .mov .avi .pdf .xls .mp4

Сжатие отправляемых страниц

SetOutputFilter DEFLATE Header unset ETag FileETag None

Принудительная постановка замыкающего слеша

Следующий код всегда будет добавлять слеш в адрес URL вашего сайта, что хорошо помогает в области SEO сайта.

RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/

Междоменное использование шрифтов для FireFox

При использовании встроенных шрифтов Firefox не позволяет брать их с внешних сайтов. Следующий код для файла.htaccess позволит обойти данное ограничение.

#Замените yourdomain.com на адрес вашего блога Header set Access-Control-Allow-Origin "http://yourdomain.com"

Выполнять PHP в файлах JavaScript

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

AddType application/x-httpd-php .js AddHandler x-httpd-php5 .js SetHandler application/x-httpd-php

Разложить файлы robots.txt, sitemap.xml и т.п. в папки доменов

# Если есть запрашиваемый файл из корня сайта, в папке домена, то перенаправляем его туда RewriteCond %{DOCUMENT_ROOT}/domain/%{HTTP_HOST}/root%{REQUEST_URI} -f RewriteRule ^(.*)$ /domain/%{HTTP_HOST}/root/$1 [L]

Блокируем User Agents через.htaccess

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

SetEnvIfNoCase User-Agent "^Black Hole" bad_bot SetEnvIfNoCase User-Agent "^Titan" bad_bot SetEnvIfNoCase User-Agent "^WebStripper" bad_bot SetEnvIfNoCase User-Agent "^NetMechanic" bad_bot SetEnvIfNoCase User-Agent "^CherryPicker" bad_bot SetEnvIfNoCase User-Agent "^EmailCollector" bad_bot SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot SetEnvIfNoCase User-Agent "^WebBandit" bad_bot SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot SetEnvIfNoCase User-Agent "^ExtractorPro" bad_bot SetEnvIfNoCase User-Agent "^CopyRightCheck" bad_bot SetEnvIfNoCase User-Agent "^Crescent" bad_bot SetEnvIfNoCase User-Agent "^Wget" bad_bot SetEnvIfNoCase User-Agent "^SiteSnagger" bad_bot SetEnvIfNoCase User-Agent "^ProWebWalker" bad_bot SetEnvIfNoCase User-Agent "^CheeseBot" bad_bot SetEnvIfNoCase User-Agent "^Teleport" bad_bot SetEnvIfNoCase User-Agent "^TeleportPro" bad_bot SetEnvIfNoCase User-Agent "^MIIxpc" bad_bot SetEnvIfNoCase User-Agent "^Telesoft" bad_bot SetEnvIfNoCase User-Agent "^Website Quester" bad_bot SetEnvIfNoCase User-Agent "^WebZip" bad_bot SetEnvIfNoCase User-Agent "^moget/2.1" bad_bot SetEnvIfNoCase User-Agent "^WebZip/4.0" bad_bot SetEnvIfNoCase User-Agent "^WebSauger" bad_bot SetEnvIfNoCase User-Agent "^WebCopier" bad_bot SetEnvIfNoCase User-Agent "^NetAnts" bad_bot SetEnvIfNoCase User-Agent "^Mister PiX" bad_bot SetEnvIfNoCase User-Agent "^WebAuto" bad_bot SetEnvIfNoCase User-Agent "^TheNomad" bad_bot SetEnvIfNoCase User-Agent "^WWW-Collector-E" bad_bot SetEnvIfNoCase User-Agent "^RMA" bad_bot SetEnvIfNoCase User-Agent "^libWeb/clsHTTP" bad_bot SetEnvIfNoCase User-Agent "^asterias" bad_bot SetEnvIfNoCase User-Agent "^httplib" bad_bot SetEnvIfNoCase User-Agent "^turingos" bad_bot SetEnvIfNoCase User-Agent "^spanner" bad_bot SetEnvIfNoCase User-Agent "^InfoNaviRobot" bad_bot SetEnvIfNoCase User-Agent "^Harvest/1.5" bad_bot SetEnvIfNoCase User-Agent "^Bullseye/1.0" bad_bot SetEnvIfNoCase User-Agent "^Mozilla/4.0 (compatible; BullsEye; Windows 95)" bad_bot SetEnvIfNoCase User-Agent "^Crescent Internet ToolPak HTTP OLE Control v.1.0" bad_bot SetEnvIfNoCase User-Agent "^CherryPickerSE/1.0" bad_bot SetEnvIfNoCase User-Agent "^CherryPicker /1.0" bad_bot SetEnvIfNoCase User-Agent "^WebBandit/3.50" bad_bot SetEnvIfNoCase User-Agent "^NICErsPRO" bad_bot SetEnvIfNoCase User-Agent "^Microsoft URL Control - 5.01.4511" bad_bot SetEnvIfNoCase User-Agent "^DittoSpyder" bad_bot SetEnvIfNoCase User-Agent "^Foobot" bad_bot SetEnvIfNoCase User-Agent "^WebmasterWorldForumBot" bad_bot SetEnvIfNoCase User-Agent "^SpankBot" bad_bot SetEnvIfNoCase User-Agent "^BotALot" bad_bot SetEnvIfNoCase User-Agent "^lwp-trivial/1.34" bad_bot SetEnvIfNoCase User-Agent "^lwp-trivial" bad_bot SetEnvIfNoCase User-Agent "^Wget/1.6" bad_bot SetEnvIfNoCase User-Agent "^BunnySlippers" bad_bot SetEnvIfNoCase User-Agent "^Microsoft URL Control - 6.00.8169" bad_bot SetEnvIfNoCase User-Agent "^URLy Warning" bad_bot SetEnvIfNoCase User-Agent "^Wget/1.5.3" bad_bot SetEnvIfNoCase User-Agent "^LinkWalker" bad_bot SetEnvIfNoCase User-Agent "^cosmos" bad_bot SetEnvIfNoCase User-Agent "^moget" bad_bot SetEnvIfNoCase User-Agent "^hloader" bad_bot SetEnvIfNoCase User-Agent "^humanlinks" bad_bot SetEnvIfNoCase User-Agent "^LinkextractorPro" bad_bot SetEnvIfNoCase User-Agent "^Offline Explorer" bad_bot SetEnvIfNoCase User-Agent "^Mata Hari" bad_bot SetEnvIfNoCase User-Agent "^LexiBot" bad_bot SetEnvIfNoCase User-Agent "^Web Image Collector" bad_bot SetEnvIfNoCase User-Agent "^The Intraformant" bad_bot SetEnvIfNoCase User-Agent "^True_Robot/1.0" bad_bot SetEnvIfNoCase User-Agent "^True_Robot" bad_bot SetEnvIfNoCase User-Agent "^BlowFish/1.0" bad_bot SetEnvIfNoCase User-Agent "^JennyBot" bad_bot SetEnvIfNoCase User-Agent "^MIIxpc/4.2" bad_bot SetEnvIfNoCase User-Agent "^BuiltBotTough" bad_bot SetEnvIfNoCase User-Agent "^ProPowerBot/2.14" bad_bot SetEnvIfNoCase User-Agent "^BackDoorBot/1.0" bad_bot SetEnvIfNoCase User-Agent "^toCrawl/UrlDispatcher" bad_bot SetEnvIfNoCase User-Agent "^WebEnhancer" bad_bot SetEnvIfNoCase User-Agent "^TightTwatBot" bad_bot SetEnvIfNoCase User-Agent "^suzuran" bad_bot SetEnvIfNoCase User-Agent "^VCI WebViewer VCI WebViewer Win32" bad_bot SetEnvIfNoCase User-Agent "^VCI" bad_bot SetEnvIfNoCase User-Agent "^Szukacz/1.4" bad_bot SetEnvIfNoCase User-Agent "^QueryN Metasearch" bad_bot SetEnvIfNoCase User-Agent "^Openfind data gathere" bad_bot SetEnvIfNoCase User-Agent "^Openfind" bad_bot SetEnvIfNoCase User-Agent "^Xenu"s Link Sleuth 1.1c" bad_bot SetEnvIfNoCase User-Agent "^Xenu"s" bad_bot SetEnvIfNoCase User-Agent "^Zeus" bad_bot SetEnvIfNoCase User-Agent "^RepoMonkey Bait & Tackle/v1.01" bad_bot SetEnvIfNoCase User-Agent "^RepoMonkey" bad_bot SetEnvIfNoCase User-Agent "^Zeus 32297 Webster Pro V2.9 Win32" bad_bot SetEnvIfNoCase User-Agent "^Webster Pro" bad_bot SetEnvIfNoCase User-Agent "^EroCrawler" bad_bot SetEnvIfNoCase User-Agent "^LinkScan/8.1a Unix" bad_bot SetEnvIfNoCase User-Agent "^Keyword Density/0.9" bad_bot SetEnvIfNoCase User-Agent "^Kenjin Spider" bad_bot SetEnvIfNoCase User-Agent "^Cegbfeieh" bad_bot Order Allow,Deny Allow from all Deny from env=bad_bot

Переадресация по языку

RewriteEngine on RewriteCond %{HTTP:Accept-Language} (ru) RewriteRule .* КУДА [L]

Защита картинок от скачивания по ссылкам на других сайтах

Включая переходы без REFERER, т.е. когда адрес указывают в строке браузера.

RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com RewriteRule \.(jpg|jpeg|png|gif)$ КУДА_ПОСЛАТЬ

RewriteEngine on RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com RewriteRule \.(jpg|jpeg|png|gif)$ КУДА_ПОСЛАТЬ

Блокировать пользователей с определенным рефером

Если вы не хотите, чтобы пользователи переходя с определенных сайтов попадали на ваш, вы можете это запретить.

RewriteEngine on RewriteCond %{HTTP_REFERER} bannedurl1.com RewriteCond %{HTTP_REFERER} bannedurl2.com RewriteRule .* - [F]

bannedurl1.com и bannedurl2.com - примеры запрещенных сайтов.

Ограничение размера файла загрузки в PHP, максимального размера запроса и максимального времени выполнения скрипта

Объем загружаемого файла:

Php_value upload_max_filesize 15M

Максимальный размер запроса для загрузки в PHP:

Php_value post_max_size 10M

Время выполнения скрипта:

Php_value max_execution_time 240

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

Php_value max_input_time 180

Указываем для IE режим вывода

Установка заголовка X-UA-Compatible:

Header set X-UA-Compatible "IE=Edge"

Установка Vary: Accept-Encoding

Для поисковой оптимизации, и уменьшения времени загрузки страницы, Google рекомендует установить заголовок Vary: Accept-Encoding

Заголовок ответа HTTP/1.1 Vary позволяет серверу указать, что закэшированный ресурс может использоваться без проверки только, если указанные в Vary заголовки совпадают с заголовками запроса. Значения: Accept-Encoding, Host, User-Agent, Accept-Language.

Header append Vary: Accept-Encoding

Общий файл картинки для всех доменов(глобальные алиасы)

Alias /javascripts /usr/share/javascript/ Options FollowSymLinks MultiViews Положите общий файл, например, icon.png в директорию /usr/share/javascript/ В файл /etc/javascript-common/javascript-common.conf и добавьте строку: Alias /apple-touch-icon-precomposed.png /usr/share/javascript/icon.png

При загрузке.doc, .docx файлы открываются в браузере с непонятной кодировкой

Если у вас открываются.doc, .docx файлы в браузере с непонятной кодировкой и вы хотите чтобы при левом клике файл сохранялся, а не открывался, то вам необходимо прописать в.htaccess:

AddType application/force-download doc AddType application/force-download docx AddType application/force-download xls AddType application/force-download xlsx

Перенаправление на безопасное соединение https

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

RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Доступ если установлена cookie с помощью htaccess

Если Ваш логин на сайте admin и он устанавливается в куку с именем login Вы можеле легко закрыть доступ посторонним в любую директорию. Для этого создайте в этой директории(папке) файл.htaccess со следующим содержимым:

RewriteEngine On RewriteCond %{HTTP_COOKIE} !login=admin RewriteRule .* http://%{HTTP_HOST}/

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

Доступ к заголовкам «If-Modified-Since» и «If-None-Match» для реализации http 304 ответа

Если PHP не установлен как модуль Apache, то для доступа к заголовкам «If-Modified-Since» и «If-None-Match» необходимо в корневом каталоге веб-сайта поместить файл.htaccess следующего содержания:

RewriteEngine On RewriteRule .* - RewriteRule .* -

После этого, необходимые заголовки будут доступны как $_SERVER["HTTP_IF_MODIFIED_SINCE"] и $_SERVER["HTTP_IF_NONE_MATCH"].

Следует заметить, что заголовки «If-Modified-Since» и «If-None-Match» не отправляются браузером, если в предыдущих запросах к данной странице он не получал в ответе веб-сервера заголовок «Last-Modified». Кроме того, при использовании в веб-приложении сессий с установками по умолчанию, указанные заголовки также не будут присылаться браузером. Для того чтобы избежать такого поведения браузера, необходимо перед запуском сессии выполнять функцию session_cache_limiter, передавая в качестве аргумента параметр "private_no_expire":

Session_cache_limiter("private_no_expire"); session_start();

Кроме этого дополнительную информацию по теме можно почерпнуть:

www.egoroff.spb.ru - Примеры переадресаций
htaccess.net.ru - дополнительная информация по htaccess.