1. Привет Гость!

    Время ПРИШЛО !

    Мы предлагаем Вам не только хорошие скрипты, но и предоставляем возможность заработать !


    Узнать подробней

Настройка .htaccess. Полное руководство

Тема в разделе "Статьи для вебмастера", создана пользователем Cyber, 21.11.16.

  1. Admin Post
    Cyber

    Cyber Админ Команда форума Администратор

    3.070
    717
    [​IMG]
    Сегодня поговорим о htaccess, файле, который позволяет настраивать веб-сервер Apache. Директивы, которые прописываются в этом файле напрямую влияют на выдачу, которую формирует веб-сервер. Инструмент этот достаточно мощный, использовать его нужно с умом. Это практически самая подробная статья на эту тему.

    Сразу напомню, прежде чем что либо менять в htaccess — сделайте копию вашего рабочего файла в укромное место.
    Статья разделена на несколько подразделов:
    1. перенаправление страниц,
    2. запрет доступа к определенным файлам,
    3. ускорение сайта и прочие фишки, которые так или иначе могут пригодиться в работе ресурса.

    Для начала — пару слов, что такое htaccess? Процитирую официальный сайт веб-сервера Apache:

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

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

    Директивы htaccess. Перенаправление
    [​IMG]

    Блокируем хотлинки с других сайтов
    Есть нехорошие товарищи, которые могут использовать картинки с вашего ресурса для использования в своих проектах. Они используют ваши изображения на своих сайтах, другими словами, используют вашу пропускную способность в своих целях, по аналогии с перемещением изображений на поддомен. Будем с ними бороться… Заменим любую картинку, на которую ведет хотлинк с другого сайта, на какое-нибудь предупреждающее изображение или на что хватит фантазии. В коде не забывайте менять адреса на ваши 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="redir"
    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. Разделяем доступы
    [​IMG]

    Запрет доступа к сайту
    Бывает такое, что необходимо запретить доступ посетителям с определенного 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 вы можете найти на сайте List of User-Agents (Spiders, Robots, Browser)

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

    # защищаем wpconfig.php
    <Files wp-config.php>
    order allow,deny
    deny from all
    </Files>
    #защищаем htaccess
    <Files .htaccess>
    order allow,deny
    deny from all
    </Files>

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

    <Files ~ "\.(js|css)$">
    order allow,deny
    allow from all
    </Files>
    Скачивание определенных типов файлов
    Современные браузеры такие умные, что иногда становится страшно. Мой Хром иногда пытается внутри себя открывать для просмотра 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 "Example Access Control"
    AuthType Basic
    <LIMIT GET>
    order allow, deny
    deny from all
    allow from Ваш IP
    </LIMIT>
    Директивы htaccess. Техническая оптимизация и ускорение
    [​IMG]

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

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

    <FilesMatch "\.js.gz$">
    ForceType text/javascript
    Header set Content-Encoding: gzip
    </FilesMatch>
    <FilesMatch "\.css.gz$">
    ForceType text/css
    Header set Content-Encoding: gzip
    </FilesMatch>
    <FilesMatch "\.js$">
    ForceType text/javascript
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} !".*Safari.*"
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteCond %{REQUEST_FILENAME}.gz -f
    RewriteRule (.*)\.js$ $1\.js.gz [L]
    ForceType text/javascript
    </FilesMatch>
    <FilesMatch "\.css$">
    ForceType text/css
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} !".*Safari.*"
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteCond %{REQUEST_FILENAME}.gz -f
    RewriteRule (.*)\.css$ $1\.css.gz [L]
    ForceType text/css
    </FilesMatch>

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

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

    <ifmodule mod_deflate.c="">
    <filesmatch ".(js|css)$"="">
    SetOutputFilter DEFLATE
    </filesmatch>
    </ifmodule>

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

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

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

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

    AddDefaultCharset UTF-8

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

    MaxClients <количество подключений>

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

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

    AddType application/x-httpd-php .js
    AddHandler x-httpd-php5 .js
    <filesmatch "\.(js|php)$">
    SetHandler application/x-httpd-php
    </filesmatch>

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

    Напоследок хочу представить вам сервис тестирования вашего htaccess файла — htaccess Tester - madewithlove. Там все просто, удачного дня
     
    element нравится это.
Загрузка...
Похожие темы
  1. Pavelz69
    Ответов:
    2
    Просмотров:
    250
  2. MaXX
    Ответов:
    3
    Просмотров:
    502
  3. Trinixy
    Ответов:
    2
    Просмотров:
    528
  4. Trinixy
    Ответов:
    0
    Просмотров:
    472

Поделиться этой страницей

Загрузка...