Почти все пункты являются обязательными, кроме
редиректа и блокировки - они настраиваются по мере необходимости ,
а также настройки ЧПУ (ЧеловекоПонятныхУРЛ) - как правило, можно обойтись функционалом CMS
Как создать .htaccess?
Все не так страшно, как может показаться:
открываем блокнот
пишем код (можно и потом это сделать)
сохраняем документ с названием .htaccess
заливаем в корень сайта (или в папку на сервере, где будем производить настройки)
или создаём файл *.txt с кодом , после заливаем его в корень сайта и
переименовываем в .htaccess
* yoursitename.ru в примерах заменяйте на адрес вашего домена
Настройки по умолчанию
1. Установка главной страницы по умолчанию
Код: Выделить всё
DirectoryIndex pagename.html
2. Определение страниц ошибок (error) в .htaccess
Код: Выделить всё
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php
ErrorDocument 500 /500.php
Соответственно адрес и название файла могут быть другими, например /error/page404.html
3. Защита от хотлинков
То, что контент с сайтов воруют, это уже давно не новость. Но бывает, что прут вместе с картинками. Вот дабы избежать нагрузки на сервер и раздутия траффика, пишем:
Код: Выделить всё
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
#домены, которые могут ссылаться на картинки с вашего сайта
RewriteCond %{HTTP_REFERER} !^http://([ -a-z0-9] \.)?yoursitename\.ru [NC]
#не показывать картинки при хотлинках
RewriteRule \.(gif|jpe?g|png)$ - [F,NC,L]
Если хотите, чтобы на чужом сайте вместо 403 ошибки появлялась определенная картинка, последнюю строку следует заменить на:
Код: Выделить всё
RewriteRule \.(jpg|png|gif)$ http://yoursitename.ru/images/imagename.jpg [NC,R,L]
4. Принудительно сохранение файла вместо открытия
Если хотите, чтобы посетители вместо просматра файла онлайн сохраняли его, то в .htaccess пишем:
Код: Выделить всё
AddType application/octet-stream .doc .mov .avi .pdf .xls .mp4
5. Кэширование файлов
Допустим в WordPress для этого есть специальный плагин: wp-super-cache. Если вы же пользуетесь CMS, которая кэширование не поддерживает, то можно произвести следующие настройки в .htaccess
Код: Выделить всё
#кэширование html и htm на сутки
<FilesMatch ".(html|htm)$">
Header set Cache-Control "max-age=43200"
</FilesMatch>
#кэширование css, javascript и txt-файлов на неделю
<FilesMatch ".(js|css|txt)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>
#кэширование flash и картинок на месяц
<FilesMatch ".(flv|swf|ico|gif|jpg|jpeg|png)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
#запрет на кэширование скриптов
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
Параметр max-age приведен в секундах.
6. Включение ошибок на время отладки
Код: Выделить всё
php_flag display_errors on
Настройка редиректа с помощью .htaccess
1. 301 редирект
Оптимальное решение для перенаправления посетителей со старых адресов на новые, если со временем структура сайта менялась, а старые URL’ы могли где-то остаться.
Код: Выделить всё
Redirect 301 /oldpage.html http://yoursitename.ru/newpage.html
Встречается еще такой вариант:
Код: Выделить всё
Redirect permanent /oldpage.html http://yoursitename.ru/newpage.html
Но в чем принципиальная разница между ними, честно говоря, объяснить не смогу. Может кто из читателей подскажет.
2. Склеивание доменов с www и без www
Редирект с адреса yoursitename.ru на http://www.yoursitename.ru
Код: Выделить всё
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.yoursitename.ru$ [NC]
RewriteRule ^(.*)$ http://www.yoursitename.ru/$1 [L,R=301]
Обратный редирект
Код: Выделить всё
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^yoursitename.ru$ [NC]
RewriteRule ^(.*)$ http://yoursitename.ru/$1 [L,R=301]
3. 302 редирект
Если вы ведете работы на сайте, то можете временно отправлять посетителей на нужную страницу (например, с описание того, когда планируется завершение работ и как можно с вами связаться).
Код: Выделить всё
RewriteEngine on
RewriteCond %{REQUEST_URI} !/informpage.html$
RewriteCond %{REMOTE_HOST} !^12\.345\.678\.90
RewriteRule $ http://yoursitename.ru/informpage.html [R=302,L]
Просмотр сайта будет возможен только с вашего ip-адреса - 12.345.678.90
4. Переадресация на другой сайт
Переадресация всех посетителей на другой сайт, помимо указанных ip-адресов
Код: Выделить всё
ErrorDocument 403 http://www.yoursitename.ru
Order deny,allow
Deny from all
Allow from 12.345.678.90
Allow from 12.345.678.92
5. Переадресация на безопасное https соединения
Код: Выделить всё
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Запрет/блокировка с помощью .htaccess
1. Запрет на листинг директории
Используется при отсутствии индексного файла, если хотите запретить просмотр содержимого папки (например, для images):
Код: Выделить всё
Options All -Indexes
Обратный код, в смысле разрешение
Код: Выделить всё
Options +Indexes
2. Блокировка доступа к файлу
Например, это может быть ваш .htaccess
Код: Выделить всё
<Files .htaccess>
order allow,deny
deny from all
</Files>
3. Блокировка по ip
Чтобы спамеры не надоедали
Код: Выделить всё
<Limit GET>
Order Deny,Allow
Deny from 12.345.678.90
Deny from 90.876.543.
Deny from .tvoe.tv
Allow from all
</Limit>
Будут заблокированы:
юзер с ip 12.345.678.90
все посетители с ip, попадающими в диапазон от 90.876.543.0 до 90.876.543.255
и все посетители от провайдера tvoe.tv
Настройка ЧПУ с помощью .htaccess
1. Как убрать из адреса ?p=
По умолчанию адрес страницы выглядит следующим образом: yoursitename.ru/?p=xxxx, где xxxx - id статьи.
Код: Выделить всё
RewriteCond %{REQUEST_URI} ^/([0-9]+)$
RewriteRule .* http://yoursitename.ru/?p=%1 [R=301,L]
2. Как убрать из адреса category
По аналогии с прошлым способом пишем
Код: Выделить всё
RewriteRule ^category/(.+)$ http://yoursitename.ru/$1 [R=301,L]
Как убрать index.htm (.php) из адреса
Избаляемся от index.php
Код: Выделить всё
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.имя сайта.ru/ [R=301,L]
Избаляемся от index.html
Код: Выделить всё
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.имя сайта.ru/ [R=301,L]
Как убрать html в конце строки
Код: Выделить всё
RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.имя сайта.ru/$1 [R=301,L]
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
Ещё больше настроек .htaccess