Htaccess настройка

Недавно писал о файле robot.txt для изменения глобальных настроек индексации, теперь немного информации об его соседе. В основной директории Вы можете наблюдать также файл .htaccess (обязательно с точкой вначале!) – служебный файле веб-сервера Apache, предназначенном для децентрализованного управления конфигурацией сервера.

Основные возможности .htaccess:

  • открыть или закрыть доступ к каталогам без индексного файла;
  • запаролить директорию – ограничить доступ по логину – паролю (htpasswd);
  • закрыть внешние ссылки (с других сайтов) на архивы;
  • запретить доступ к файлам определенного формата, или доступ к сайту в определенный промежуток времени;
  • запретить – открыть доступ с определенных (айпи) IP адресов;
  • сменить или добавить еще несколько новых названий индексного файла;
  • включить по мере необходимости проверку в страницах определенного формата – типа на наличии SSI, Perl, PHP и др. включений – директив;

  • сделать редиректы (Redirect) – пересылку пользователя с одних адресов на другие – перенаправления пользователя на другую страницу;
  • скрыть структуру каталогов сайта отображающеюся в адресной сроке браузера, или возможно сделать её более простой и наглядной для конечного пользователя (mod_Rewrite);
  • управлять роботами – ботами поисковых систем на сайте;
  • безболезненно и незаметно перенести сайт на новый домен – смена домена;
  • использовать свои собственные общие страницы ошибок, например, как-то наиболее часто используемые -* 401 Authorization Required – Требуется авторизация* 403 Forbidden – Доступ запрещен* 404 Not Found – Документ не найден* 500 Internal Server Error – Ошибка в работе сервера
  • при необходимости сменить кодировку страниц отправляемых веб сервером посетителям;
  • запретить или нужным образом настроить кэширование веб сервера;
  • обучить веб сервер понимать дополнительные нужные Вам форматы (типы) файлов.

В интернете накопал полезную информацию, возможно будет интересное. Шпаргалка не помешает;) Комментарий прилагается.

  Кодировка  Как выставить русскую кодировку.   AddDefaultCharset windows-1251   Определение кодировки на определенные типы файлов   AddType "text/html; charset=koi8-r" .html .htm shtm   Определение кодировки на загружаемые файлы   CharsetSourceEnc windows-1251   Отключение перекодировки   Если при загрузке скриптом не загружаются бинарные файлы, создайте файл .htaccess и поместите его папку, где вы хотите отключить функцию, в нем пропишите строчку:    CharsetRecodeMultipartForms off    Назначение стартовой страницы.    
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 AuthUserFile "/pub/home/login/htdocs/clousearea/.htpasswd" 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://, https://, 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 - это путь до корневого файла (до нужного файла). http://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.site.kz Перенаправление (редирект) только посетителей с определенным IP-адресом. SetEnvIf REMOTE_ADDR 192.145.121.1 REDIR="redir" RewriteCond %{REDIR} redir RewriteRule ^/$ /only_for_you.html # Защита паролем. 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 окно для ввода логина и пароль. А можно просто вписать в поле адреса: http://username:password@www.serv.ru/directory Как заставить Апач обрабатывать 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 интерпретатором. При большой посещаемости сервера такие ухищрения могут вызвать тормоза. Спрашивайте у админа.</pre> # Error 404 ..| Ошибка 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 если вы хотите отключить. # Защита от хотлинков Хотлинк (hotlink) - это когда ставят прямую ссылку на ваш контент с другого сайта. Часто т.
{HTTP_REFERER} !.*/foo-with-gif.html$ RewriteRule ^inlined-in-foo.(gif|jpg)$ - [F]

с/у УтБ

P.S.: В следующей статье я привиду примеры готовых файлов .htaccess для wordpress и joomla
Маленькая танцующая девочка))) Талант – есть талант! ;)

www.gtalk.kz

Директивы htaccess. Перенаправление


Htaccess настройка

Блокируем хотлинки с других сайтов

Есть нехорошие товарищи, которые могут использовать картинки с вашего ресурса для использования в своих проектах. Они используют ваши изображения на своих сайтах, другими словами, используют вашу пропускную способность в своих целях, по аналогии с перемещением изображений на поддомен. Будем с ними бороться… Заменим любую картинку, на которую ведет хотлинк с другого сайта, на какое-нибудь предупреждающее изображение или на что хватит фантазии. В коде не забывайте менять адреса на ваши URL.

RewriteEngine On  RewriteCond %{HTTP_REFERER} !^http://(.+.)?ваш-урл.com/ [NC]  RewriteCond %{HTTP_REFERER} !^$  #Замените путь к картинке  RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/noHL.jpg [L]

Перенаправим RSS фиды WordPress на Feedburner

Я не думаю, что кто-то пользуется чем-то другим, отличным от Feedburner. Удобно для пользователя, удобно для владельца блога, статистика, опять же. Если вы еще не используете — крайне рекомендую. Код ниже перенаправит все ваши RSS потоки на ваш аккаунт, не забывайте только вставить нужный адрес.


RedirectMatch 301 /feed/(atom|rdf|rss|rss2)/?$   RedirectMatch 301 /comments/feed/(atom|rdf|rss|rss2)/?$ http://feedburner.com/yourfeed/

В этом примере идет перенаправление двух потоков: основного RSS и обновление комментариев, если посетитель подписан на обновления.

Изменим страницы ошибок

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

ErrorDocument 400 /errors/badrequest.html  ErrorDocument 401 /errors/authreqd.html  ErrorDocument 403 /errors/forbid.html  ErrorDocument 404 /errors/404.html  ErrorDocument 500 /errors/serverr.html  #Замените /errors/*.html на путь к вашим страницам ошибок

В этом примере идет перенаправление в случае основных ошибок. 404 я тоже добавил, хотя CMS обычно отрабатывают такие моменты, но бывали случаи.

301 и 302 редирект или перенаправление

301 редирект или, так называемое постоянное перенаправление — говорит о том, что страница поменяла адрес или URL и перенаправляет на новую страницу. Если у вас на сайте была проиндексированная ПС страница, а вы поменяли ее адрес — в обязательном порядке сделайте 301 редирект на новую страницу. При 301 редиректе старая страница не индексируется, а вместо нее «подставляется» новая.


RewriteEngine on  Redirect 301 /old-page http://ваш-урл.ру/new-page

Собственно, похожий пример внимательный читатель увидит выше, в случае перенаправления RSS. Да, технология та же.
Бывает так, что сайт переезжает на новый домен, нужно сохранить структуру ссылок, а их могут быть сотни и тысячи, на каждую установить перенаправление нереально. Код ниже поможет разобраться с такой ситуацией:

Options +FollowSymLinks  RewriteEngine on  RewriteRule (.*) [R=301,L]

Есть интересная методика «скрытия» внешних ссылок путем 301 редиректа. Допустим, у вас есть «сквозная» ссылка в сайдбаре, которая ведет на ваш профиль в Google+, она внешняя, то есть ведет на внешний ресурс. Для SEO очень хорошо, когда таких ссылок как можно меньше. Можно спрятать их и сделать внутренними.

Технология производства внутренних ссылок из внешних:

  • ставим ссылку на мнимую страницу, допустим gering111.com/google-plus
  • настраиваем 301 редирект в htaccess с этой страницы на реальную страницу вашего профиля
  • посетитель ничего не чувствует, ПС довольны

Подобным образом можно ставить любые другие условно постоянные ссылки. 
302 редирект или временное перенаправление говорит ПС, что страница перемещена временно, поэтому индексировать нужно обе страницы, старую и новую.

RewriteEngine on  Redirect 302 /old-page http://ваш-урл.ру/new-page

Код абсолютно такой же, как в случае с постоянным перенаправлением.
302 редирект удобно использовать, когда проводятся какие-либо долгосрочные работы на сайте и не нужно показывать посетителям «поломанные» страницы. В таком случае вам поможет этот код:

RewriteEngine on  RewriteCond %{REQUEST_URI} !/inside.html$  RewriteCond %{REMOTE_ADDR} !^123.123.123.123  RewriteRule $ /inside.html [R=302,L]

Склеиваем сайты с www и без него

Очень плохо, когда сайт доступен по двум адресам, ПС это очень не любят. Склеить это в один адрес поможет код ниже:

Options +FollowSymLinks  RewriteEngine On  RewriteCond %{HTTP_HOST} ^www.ваш-урл.com$ [NC]  RewriteRule ^(.*)$ http://ваш-урл.com/$1 [R=301,L]

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

Показ страниц в зависимости от IP

SetEnvIf REMOTE_ADDR 192.168.0.1 REDIR=&amp;quot;redir&amp;quot;  RewriteCond %{REDIR} redir  RewriteRule ^/$ /about.html

Добавлять адреса можно дублированием первой строки, в последней — меняется страница для перенаправления.

Перенаправляем на главную

Перенаправление со страниц site.com/index.php и site.com/index.html на страницу site.com/. За код спасибо Василию Красноженову.

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.html HTTP/  RewriteRule ^index.html$ http://site.com [R=301,L]  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/  RewriteRule ^index.php$ http://site.com [R=301,L]

Директивы htaccess. Разделяем доступы

Htaccess настройка

Запрет доступа к сайту

Бывает такое, что необходимо запретить доступ посетителям с определенного IP, спамерам или еще кому нехорошему.

Order Allow,Deny  Allow from all  Deny from 192.168.0.1

Добавлять IP в список можно просто добавляя последнюю строку и меняя там адрес на нужный.
Противоположная ситуация, когда всем нужно запретить, кроме некоторых IP, тогда используем такой код:

Order Deny,Allow  Deny from all  Allow from 192.168.0.1

Добавлять адреса аналогично предыдущему примеру.

Запрещаем просмотр нежелательным User-Agent

Каждый браузер или приложение, которое запрашивает страницу, так или иначе имеет идентификатор — User-Agent. Можно запретить просмотр нежелательным товарищам. Это могут быть как программы, сканирующие сайты, так и старые браузеры, от поддержки которых вы целиком отказались. Ситуации бывают разные.

SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]  SetEnvIfNoCase user-Agent ^Java.* [NC,OR]  SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]  SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]  Order Allow,Deny  Allow from all  Deny from env=bad_bot  

Полный список известных User-Agent вы можете найти на сайте http://www.user-agents.org/

Запрещаем доступ к определенному файлу

В примере стоит запрет на доступ к файлам wp-config и htaccess, тем самым повышается уровень общей защиты. Очень нужная директива, рекомендую добавить в свои файлы

  # защищаем wpconfig.php  &amp;lt;Files wp-config.php&amp;gt;  order allow,deny  deny from all  &amp;lt;/Files&amp;gt;  #защищаем htaccess  &amp;lt;Files .htaccess&amp;gt;  order allow,deny  deny from all  &amp;lt;/Files&amp;gt; 

Аналогично можно защитить css и js файлы, которые используются плагинами:

&amp;lt;Files ~ &amp;quot;.(js|css)$&amp;quot;&amp;gt;  order allow,deny  allow from all  &amp;lt;/Files&amp;gt;

Скачивание определенных типов файлов

Современные браузеры такие умные, что иногда становится страшно. Мой Хром иногда пытается внутри себя открывать для просмотра PDF файлы, иногда вешаясь насмерть. С помощью htaccess можно принудительно сказать браузеру, что делать с тем или иным типом файлов, не оставляя этот момент на его усмотрение. В данном случае это скачивание. Дополнительные типы файлов можно добавить по аналогии.

AddType application/octet-stream .pdf  AddType application/octet-stream .zip  AddType application/octet-stream .avi

Ограничение на доступ к админке WordPress

Если у вас постоянный IP адрес, можно только ему давать доступ к админ-панели WordPress

AuthUserFile /dev/null  AuthGroupFile /dev/null  AuthName &amp;quot;Example Access Control&amp;quot;  AuthType Basic  &amp;lt;LIMIT GET&amp;gt;  order allow, deny  deny from all  allow from Ваш IP  &amp;lt;/LIMIT&amp;gt;

Директивы htaccess. Техническая оптимизация и ускорение

Htaccess настройка

Запрещаем автоматическое индексирование файлов

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

Options -Indexes

Включаем gzip сжатие

Вы знаете о том, что данные на сервере можно сжать, а клиент их распакует у себя? Код ниже как раз включает такую штуку. Нужно только убедиться, что gzip разрешен на вашем хостинге, но обычно он есть.

&amp;lt;FilesMatch &amp;quot;.js.gz$&amp;quot;&amp;gt;  ForceType text/javascript  Header set Content-Encoding: gzip  &amp;lt;/FilesMatch&amp;gt;  &amp;lt;FilesMatch &amp;quot;.css.gz$&amp;quot;&amp;gt;  ForceType text/css  Header set Content-Encoding: gzip  &amp;lt;/FilesMatch&amp;gt;  &amp;lt;FilesMatch &amp;quot;.js$&amp;quot;&amp;gt;  ForceType text/javascript  RewriteEngine On  RewriteCond %{HTTP_USER_AGENT} !&amp;quot;.*Safari.*&amp;quot;  RewriteCond %{HTTP:Accept-Encoding} gzip  RewriteCond %{REQUEST_FILENAME}.gz -f  RewriteRule (.*).js$ $1.js.gz [L]  ForceType text/javascript  &amp;lt;/FilesMatch&amp;gt;  &amp;lt;FilesMatch &amp;quot;.css$&amp;quot;&amp;gt;  ForceType text/css  RewriteEngine On  RewriteCond %{HTTP_USER_AGENT} !&amp;quot;.*Safari.*&amp;quot;  RewriteCond %{HTTP:Accept-Encoding} gzip  RewriteCond %{REQUEST_FILENAME}.gz -f  RewriteRule (.*).css$ $1.css.gz [L]  ForceType text/css  &amp;lt;/FilesMatch&amp;gt;

Код не работает для изображений, но к ним применять gzip не рекомендуется. Именно такой код установлен у меня.

Сжатие с применением mod_deflate

Ходят слухи, что с помощью этого мода сжимать данные лучше и сайт работает быстрее. Я не могу протестировать, да и не встречал в Интернете подобных тестов. Если у кого есть такая информация — буду благодарен. А код выложу, мало ли

&amp;lt;ifmodule mod_deflate.c=&amp;quot;&amp;quot;&amp;gt;  &amp;lt;filesmatch &amp;quot;.(js|css)$&amp;quot;=&amp;quot;&amp;quot;&amp;gt;  SetOutputFilter DEFLATE  &amp;lt;/filesmatch&amp;gt;  &amp;lt;/ifmodule&amp;gt;

Включаем кэширование браузера клиента

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

Header append Cache-Control &amp;quot;private&amp;quot;  FileETag MTime Size  ExpiresActive On  ExpiresDefault &amp;quot;access plus 0 minutes&amp;quot;  ExpiresByType image/ico &amp;quot;access plus 1 years&amp;quot;  ExpiresByType text/css &amp;quot;access plus 1 years&amp;quot;  ExpiresByType text/javascript &amp;quot;access plus 1 years&amp;quot;  ExpiresByType image/gif &amp;quot;access plus 1 years&amp;quot;  ExpiresByType image/jpg &amp;quot;access plus 1 years&amp;quot;  ExpiresByType image/jpeg &amp;quot;access plus 1 years&amp;quot;  ExpiresByType image/bmp &amp;quot;access plus 1 years&amp;quot;  ExpiresByType image/png &amp;quot;access plus 1 years&amp;quot;

Указываем кодировку по умолчанию

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

AddDefaultCharset UTF-8

Ограничиваем число подключений к сайту

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

MaxClients &amp;lt;количество подключений&amp;gt;

При размещении в корневом каталоге, директива работает на весь сайт, если же положить ее в папку с файлами, которые вы отдаете на скачивание — можно ограничить скачивание в несколько потоков.

Разрешаем выполнение php внутри JavaScript

Иногда необходимо выполнить некоторый код внутри скрипта. Этот код поможет включить эту функцию

AddType application/x-httpd-php .js  AddHandler x-httpd-php5 .js  &amp;lt;filesmatch &amp;quot;.(js|php)$&amp;quot;&amp;gt;  SetHandler application/x-httpd-php  &amp;lt;/filesmatch&amp;gt;

Вот и все, что касается htaccess и его стандартного использования. Я не стал упоминать о защите папок паролями, потому что не считаю это правильным, о «защите» от спама, путем блокировки запросов запросов без передачи Referer, потому что все современные спам-машины давно умеют это делать. Ну и прочие вещи, которые не считаю грамотно реализованными.

Напоследок хочу представить вам сервис тестирования вашего htaccess файла — http://htaccess.madewithlove.be/. Там все просто, удачного дня

gering111.com

Что собой представляет файл htaccess и для чего используется

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

Файл htaccess был придуман специально для того, чтобы можно было предоставить возможность менять конфигурацию сервера каждому пользователю, затрагивая только свой собственный сайт, а не весь сервер целиком. Всем известно, что основные директивы конфигурации Apache находятся в файле httpd.conf. Однако у большинства пользователей, а если говорить о виртуальном хостинге, то у всех пользователей, нет возможности получить доступ к нему и прав на модификацию, так как это действие будет распространяться на всех.

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

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

Некоторые особенности использования htaccess:

1. В нем можно переопределить большое количество директив, прописанных в главном файле httpd.confg

2. Если расположить htaccess-файл в корневой каталог, он распространится на весь сайт (исключения составят только те каталоги, в которых расположен собственный конфигурационный файл, и каталоги, расположенные ниже в древовидной структуре)

3. Разместить htaccess-файл можно в любой каталог, а его директивы будут применены ко всем подкаталогам

4. Htaccess не доступен пользователю для просмотра из браузера, так как относится к категории «системные».

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

  • Директивы простого перенаправления (редирект);
  • Директивы сложного перенаправления (mod_rewrite);
  • Индексные страницы;
  • Обработка ошибок;
  • Определение кодировки;
  • Управление доступом к директориям и файлам;
  • Паролирование директорий;
  • Опции PHP.

Примеры наиболее частого использования файла htaccess

Сейчас мы рассмотрим самые распрострнные рабочие варианты использования htaccess для настройки сайта.

Прежде чем мы приступим обратите внимание на следующие моменты:

1. Не рекомендуется вносить какие-либо изменения в файл конфигурации htaccess до тех пор, пока не будет создана его резервная копия. С ее помощью всегда можно будет вернуть настройки сервера в прежнее состояние.

2. Для того, чтобы создать новый файл с расширением htaccess, необходимо, открыть блокнот или другой текстовый редактор, написать код, сохранить файл, указав расширение .htaccess (точка в переди). Затем остается забросить его в директорию, для которой он предназначался.

3. Синтаксис .htaccess

— Пути к файлам (директориям) указываются от корня сервера.

Пример:

— В случае настройки файла htaccess лежащего в корневой папке сайта, пути указываются от корня этой папки.

Пример:

— Домены записываются с указанием протокола http:// или https://

Пример:

— Файл имеет название именно «точка» htaccess.

— Для создания закомментированной строчки используйте знак #.

— Редактировать файл удобнее всего при помощи редактора AkelPad, входящего в состав Total Commander, достаточно его выделить и нажать F4.

Простое перенаправление — директива Redirect

1. Осуществление перенаправления на новые страницы сайта

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

2. Приведение фидов к общему формату

Раньше использовались различные форматы фидов, такие как: Atom, RSS, Rdf. Сегодня RSS является основным и самым популярным среди них, поэтому можно позаботиться о том, чтобы другие форматы перенаправлялись в один. Для этого также используется файл htaccess и следующий код:

Сложное перенаправление — директива RewriteRule

1. Перенаправление домена с www на без www.

Очень часто приходится использовать 301 редирект в htaccess для склеивания доменов с www и без www. Раньше поисковые системы считали такие адреса совершенно различными и смотрели на них как на разные сайты. Сегодня задача по склейке возлагается на поискового робота, но никогда не лишним будет указать корректное зеркало. К тому же, у самих не будет никакой путаницы.

2. Перенаправление посетителей на разные старницы в зависимости от IP-адреса посетителя.

В htaccess имеется возможность указать на какую страницу, будет перенаправлен пользователь с конкретным IP-адресом. Например, перенаправление посетителей с ip адресом 183.11.101.1 на страницу kontakt.html

3. Перенаправление в случае обновления веб-ресурса

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

Где 14.124.354.80 — заменить на свой IP адресс.

4. Защита от хотлинков

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

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

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

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

6. Автоматическая подстановка слеша в конце адреса.

Очень распространены ситуации, когда URL-адрес, заканчивается именем каталога: http://vash-sait.ru/images/raznoe 

Apache самостоятельно может исправить ошибку и сделать 301-е перенаправление, добавив к ссылке недостающий слеш. Таким образом, пользователь не ощутит никакой разницы и получит в ответ необходимую страницу. Но на выполнение такого действия понадобится в два раза больше времени. Следующий код всегда будет добавлять / в конце адреса.

7. Блокировка пользователей пришедших с определенного сайта

Если владелец сайта не хочет, чтобы его ресурс посещали пользователи, зашедшие с определенного домена и требуется им закрыть доступ — htaccess также готов помочь. Вы можете перекрыть трафик с определенных сайтов используя страницу 403 или «запрет доступа». Полезна данная настройка тогда, когда на ваш сайт появились ссылки с сайтов с запрещенным контентом и по ним идет трафик на ваш сайт.

Индексные страницы — директива DirectoryIndex

1. Изменение индексной старницы загружаемой по умолчанию

Обычно по умолчанию индексными страницами является index.htm, index.php или index.html, при обращении к директории сайта сразу происходит поиск данных файлов. Но при необходимости можно переопределить индексную страницу на любую другую. Подобная задача также решается с использованием htaccess-файла.

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

Обработка ошибок — директива ErrorDocument

1. Пользовательская страница ошибок

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

2. Создание своих страниц с описанием ошибок

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

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

  • 401 — Требуется авторизация (Authorization Required)
  • 403 — пользователь не прошел аутентификацию, запрет на доступ (Forbided)
  • 404 — запрашиваемый документ (файл, директория) не найден (Not Found)
  • 500 — внутренняя ошибка сервера — ошибка скрипта или ошибка в синтаксисе файла .htaccess — (Internal Server Error)

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

1. Определение кодировки, в которой сервер «отдает» файлы

Чтобы у пользователя на дисплее монитора не выводились непонятные для него символы, из которых не представляется возможности прочесть слова, необходимо указать корректную кодировку. Даже при отсутствии тега < Мета http-equiv = «Content-Type»> текст на странице будет всегда корректным и поможет в этом снова htaccess-файл.

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

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

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

1. Запретить доступ ко всем файлам

Самый простой способ запретить просматривать файл – установить пароль, но не всегда этого достаточно. В некоторых случаях у пользователя не должно быть прав на просмотр любых файлов или каталогов (например нужно заблокировать системные каталоги, изменения в которых могут усугубить работу сервера). В htaccess-файле прописывается отрывок кода, лишающий всех привилегий пользователей.

2. Разрешить доступ с определенного IP

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

Для этого используются директивы order (далее указывается порядок выполнения директив), deny (директива, с помощью которой запрещается всем и ко всему), allow (директива, за которой следует IP-адрес, попадающий в список исключений и открывающий ему доступ к директивам и файлам). Стоит также отметить, что директивы deny и allow должны следовать именно в этом порядке, иначе действие директивы allow будет перекрыта директивой deny и не даст ожидаемого результата.

3. Запретить доступ с определенного IP

В htaccess можно указать IP-адреса, для которых будет установлены ограниченные права доступа.

4. Запретить доступ к определенному файлу

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

5. Ограничить доступ к определенному типу файлов

6. Запретить просмотр директории без индексных файлов

Если в htaccess добавить сточку Options –Indexes, будет ограничена возможность просматривать каталоги, в которых нет индексных файлов.

7. Разрешить просматривать директорию

Также можно разрешить просматривать определенные директории.

Опции PHP

1. Заставить работать PHP скрипты в HTML файлах

2. Заставить выполнять PHP в файлах JavaScript

3. Ограничение размера загружаемого файла для PHP

20M  — это ращмер файла в мегабайтах 

4.  Изменить максимальный размер запроса для загрузки в PHP

5. Изменить время исполнения скрипта

30 — время исполнения скрипта в секундах.

6. Изменение времени на разбор введенных данных

webmastermix.ru

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

  • RewriteBase
  • RewriteCond
  • RewriteEngine
  • RewriteLock
  • RewriteLog
  • RewriteLogLevel
  • RewriteMap
  • RewriteOptions
  • RewriteRule

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

  1. Простой редирект:
    Redirect 301 / http://www.domain.ru/  

    или

    redirect /secret http://www.site.ru/nosecret  

    Ставится в файле .htaccess или httpd.conf для Apache. Первый «/» означает, что всё с верхнего уровня сайта, включая все подкаталоги, будет переадресовано (не забывайте поставить последний «/»). Если Вы хотите переадресовать только страницу, сохранив PR старой страницы, можно сделать так:

    Redirect 301 /old/old.htm http://www.domain.ru/new.htm где:
    /old/old.htm — путь и имя старой страницы
    http://www.domain.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} ^domain.ru  RewriteRule ^(.*)$ http://www.domain.ru/$1 [R=permanent,L]  
  5. Редирект с регулярным выражением:
    RedirectMatch 301 (.*) http://www.domain.ru$1 Прописывается в файле .htaccess.  

    (.*) RedirectMatch фактически соответствует регулярным образцам выражения после доменного имени. Таким образом, нельзя выполнить соответствие образца на ^/domain.ru. Однако, можно преобразовать страницы с использованием .html расширения к файлам того же самого названия, но с .php расширением:

    RedirectMatch 301 (.*).html$ http://www.domain.ru$1.php  

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

    RedirectMatch Permanent ^/html/resources.html$ http://www.domain.com/resources.php  RedirectMatch Permanent ^/html/other_page.html$ http://www.domain.com/other_page.php  RedirectMatch Permanent ^/(.*)$ http://www.domain.com/  

    «RedirectMatch Permanent» — это эквивалент «RedirectMatch 301», строка с «*(Wildcard)» должна быть последней в этом списке.

  6. Создание удобо читаемых URL
    Чтобы преобразовать, например, www.domain.ru/product.php?id=123 в www.domain.ru/product/123 следующим образом:
    RewriteEngine on  RewriteRule ^product/([^/.]+)/?$ product.php?id=$1 [L]  

    В следующем примере преобразуем www.domain.ru/script.php?product=123 в www.domain.ru/cat/product/123/:

    RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2  
  7. Редирект на PHP:
    header("HTTP/1.1 301 Moved Permanently");  header("Location: http://www.domain.ru/newdir/newpage.htm");  exit();  

    Естественно, надо создать страницу, при обращении к которой и будет происходить Редирект, и разместить её на сервере. И лучше укажите HTTP/1.1 (а не HTTP/1.0 или HTTP/0.9, которые не поддерживают виртуальный хостинг)

  8. Редирект всех файлов в папке на один файл.
    Например вы больше не нуждаетесь в разделе сайта Files и хотите перенаправить все запросы к папке /files на один файл /page.php. Для этого добавляем в .htaccess следующий код.
    RewriteRule ^files(.*)$ /page.php [L,R=301]  
  9. Редирект всей папки кроме одного файла
    В следующем примере все файлы из папки /files будут редиректится на на файл /page.php,  кроме файла /files/test.html котоый должен редиректится на /test-1.html
    RewriteRule ^files/test.html /test-1.html [L,R=301]  RewriteRule ^files(.*)$ /page.php [L,R=301]  
  10. Редирект динамического URL на новый файл.
    Данный вариант пригодится если вы хотите редиректить динамический URL с параметрами на новый статический файл.
    RewriteRule ^article.jsp?id=(.*)$ /test.htm [L,R=301]  

    То есть теперь, запрос к файлу вида http://www.domain.ru/article.jsp?id=8547 и/или http://www.domain.ru/article.jsp?id=1234  будет отправлен на файл http://www.domain.ru/test.htm.

  11. Массовый редирект новых файлов.
    Тепепь перейдем к самому сложному моменту, когда вам надо редиректить массу URL-ов, например после смены вашей CMS. Тут сразу возникает ряд проблем. Во-первых, внесение всех изменившихся адресов в .htaccess файл займет очень много времени, да и само по себе занятие малоприятное. Во-вторых, слишком много записей в .htaccess файле будут тормозить Apache сервера. И в третьих, при внесении такого количества информации высока вероятность, что вы где то ошибетесь. По этому, самый лучший выход, это нанять програмиста который вам напишет динамический редирект.
    Нижеприведенный пример написан на PHP, но так же может быть выполнен на любом языке. Предположим вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый id должны быть средирекчены. Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа. old_id INT new_url VARCHAR (255) Далее пишем код который свяжет ваши старые id с новыми URL-ами
    После этого, добавляем следующую строчку в .htaccess:
    RewriteRule ^/product-(.*)_([0-9]+).php /redirectold.php?productid=$2  

    затем создаем PHP файл redirectold.php, который будет поддерживать 301 редирект:

    <?php  function getRedirectUrl($productid) {  // Connect to the database  $dServer = "localhost";  $dDb = "mydbname";  $dUser = "mydb_user";  $dPass = "password";    $s = @mysql_connect($dServer, $dUser, $dPass)  or die("Couldn't connect to database server");    @mysql_select_db($dDb, $s)  or die("Couldn't connect to database");    $query = "SELECT new_url FROM redirects WHERE old_id = ". $productid;  mysql_query($query);  $result = mysql_query($query);  $hasRecords = mysql_num_rows($result) == 0 ? false : true;  if (!$hasRecords) {  $ret = 'http://www.yoursite.com/';  } else {  while($row = mysql_fetch_array($result))  {  $ret = 'http://www.yoursite.com/'. $row["new_url"];  }  }  mysql_close($s);  return $ret;  }    $productid = $_GET["productid"];  $url = getRedirectUrl($productid);    header("HTTP/1.1 301 Moved Permanently");  header("Location: $url");  exit();  ?>  

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

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

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

    Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения <STRING, >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.(.*) [NC]  RewriteRule ^/?(.*) http://%1/$1 [L,R=permanent]  
  13. Меняем расширение .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. к конкретному файлу:
    <Files secret.php>  deny from all  </Files>  
  3. по ip пользователя:
    order deny,allow  deny from all  allow from 192.152.37.125  

    Доступ в данную директорию будет разрешён только пользователю с ip 192.152.37.125.

  4. Директива Options -Indexes — запрет на отображение содержимого каталога при отсутствии индексного файла Иногда нужно сделать так, чтобы в случае отсутствия в каталоге файла, который показывается по умолчанию, не выдавался список файлов в каталоге. Тогда можно добавить в .htaccess такую строчку :
    Options -Indexes  

    В этом случае вместо списка файлов в каталоге посетитель получит HTTP ошибку 403 — access forbidden.

  5. Запретить доступа к файлам с несколькими типа расширений <Files ~ «.(inc|conf|cfg)$»> deny from all </Files> Запрещен доступ к файлам с расширением *.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).
    [NC] — не учитывать регистр букв.
    [OR] — означает ‘или следующее условие’.

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

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

AddDefaultCharset windows-1251  

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

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

CharsetSourceEnc windows-1251  

Для установки пароля на директорию можно воспользоваться системой базовой авторизации, предусмотренной в веб-сервере 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.domain.ru/404.php  

IE игнорирует страницы размером меньше 512 байт.

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

Чтобы избежать индексации поисковыми системами директорий и поддиректорий, необходимо прописать такую строку, к примеру:

DirectoryIndex index.php  

Эта директива задает файл, который будет вызван при обращении к директории без указания имени файла.

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

DirectoryIndex index.html index.php index.shtml  

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

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

Очень часто бывает, что веб-мастера нагло копируют контент с Вашего сайта вместе с рисунками, причем рисунки подгружаются с Вашего же сервера. Это создает лишний трафик, что, зачастую, приводит к ряду проблем. Как же защититься от таких веб-мастеров и не помешать поисковым роботам индексировать изображения? Все просто:

RewriteEngine on  RewriteCond %{HTTP_REFERER} .  RewriteCond %{HTTP_REFERER} !^http://([^.]+.)?site. [NC]  RewriteCond %{HTTP_REFERER} !google. [NC]  RewriteCond %{HTTP_REFERER} !search?q=cache [NC]  RewriteCond %{HTTP_REFERER} !msn. [NC]  RewriteCond %{HTTP_REFERER} !yahoo. [NC]  RewriteCond %{REQUEST_URI} !^/image.gif$  RewriteRule .(gif|jpg|png)$ /image.gif [NC,L]  

image.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  <FilesMatch ".(jpg|gif|png)">   Order Allow,Deny   Allow from env=local_ref  </FilesMatch>  

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

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 [en]$|^Mozilla/4.0$) [NC]  RewriteRule ^(.*)$ - [F]  #  RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* [NC,OR]  RewriteCond %{HTTP_USER_AGENT} ^Opera.* [NC,OR]  RewriteCond %{HTTP_USER_AGENT} ^Firefox.* [NC,OR]  RewriteCond %{HTTP_USER_AGENT} ^Netscape.* [NC]  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  

 

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

Кэширование для всех типов файлов по времени доступа

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 <IfModule mod_headers.c> Header append Cache-Control «no-store, no-cache, must-revalidate» </IfModule> # Заголовок Expires <IfModule mod_expires.c> ExpiresActive On ExpiresDefault «now» </IfModule>

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

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

# Разрешение кеширования в этой папке # Необходимо включение модулей # mod_headers.c и mod_expires.c # # Заголовок Cache-Control <IfModule mod_headers.c> Header append Cache-Control «public» </IfModule> # Заголовок Expires <IfModule mod_expires.c> ExpiresActive On ExpiresDefault «access plus 1 hours» #ExpiresDefault «access plus 10 years» </IfModule>

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

<FilesMatch .*.js$> ExpiresDefault «access plus 3 days» </FilesMatch>

Будьте осторожны при кешировании, т.к. при изменении файла, пользователь может получить новый вариант только через 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 [NC]  RewriteRule (.*) newdirectory/$1 [L]  

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

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

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

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

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 ^(.+) - [PT]  

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

Если Вы хотите предоставлять адреса 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

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

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

или Добавьте в .htaccess <IfModule mod_security.c> SecFilterEngine Off SecFilterScanPOST Off </IfModule> Для сообщения: можно снять защиту только на загрузку файлов на сервер: <IfModule mod_security.c> <Files async-upload.php> SecFilterEngine Off SecFilterScanPOST Off </Files> </IfModule>

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

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

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

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

HTTP заголовки: соединение & запрос:  
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
 
внутренние сервера: системные: специальные:
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ

Эти переменные полностью соответствуют названным похожим образом 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 приведенный выше.

 

hostline.ru


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Adblock
detector