.htaccess. Несколько примеров

Запрет веб-доступа:

Order Deny,Allow 
Deny from all

Запрет веб-доступа кроме IP (XXX.XXX.XXX.XXX):

Order deny,allow
Deny from all
Allow from xxx.xxx.xxx.xxx

Запретить доступ для IP (XXX.XXX.XXX.XXX):

Order allow,deny
Allow from all
Deny from xxx.xxx.xxx.xxx

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

<Files ~ "\.(inc|conf|cfg)$"> 
deny from all
</Files>

Запретить доступ к определенному файлу (secret.php):

<Files secret.php> 
deny from all
</Files>

Вы так же можете запретить веб-доступ диапазону IP-адресов:

Order Deny,Allow
Deny from 192.168.0.0/16

Перенаправление (редирект) на другой адрес:

Redirect / http://www.another-site.ru

Перенаправление (редирект) только при запросе определенных страниц:

Redirect /blog http://www.another-site.com/blog

Перенаправление example.com на www.example.com:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\..* [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]

И наоборот:

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Перенаправление (редирект) только посетителей с определенным IP (XXX.XXX.XXX.XXX):

SetEnvIf REMOTE_ADDR XXX.XXX.XXX.XXX REDIR="redir" 
RewriteCond %{REDIR} redir
RewriteRule ^/$ /page.html

Обработка ошибок Apache:

ErrorDocument 401 /401.html 
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

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


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

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

Защита паролем папки/сайта

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

AuthType Basic
AuthName "Password Protected Area"
AuthUserFile /path/to/.htpasswd
Require valid-user

В файле, который указан в коде — «/path/to/.htpasswd», прописываем логин/пароль:

testuser:Passwordofuser

Запрет POST запросов

Запретить POST запросы к URL с wp-login.php:

#Запрет POST запросов к wp-login кроме IP 33.33.33.222
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REMOTE_ADDR} !^33\.33\.33\.222$
RewriteCond %{REQUEST_URI} ^/wp-login\.php$
RewriteRule .? - [F]

Злоумышленники любят в своих атаках использовать Post запросы.

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

# Stop spam attack logins and comments
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{REQUEST_METHOD} POST
	RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login)\.php*
	RewriteCond %{HTTP_REFERER} !.*example.com.* [OR]
	RewriteCond %{HTTP_USER_AGENT} ^$
	RewriteRule (.*) - [F,L]
</ifModule>

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

Вот такой код для файла htaccess рекомендует WordPress.org:

<IfModule mod_deflate.c>
# Insert filters
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE image/svg+xml

# Drop problematic browsers
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</IfModule>

Или почти такой же код рекомендует известный сайт gtmetrix.com:

<IfModule mod_deflate.c>
  # Compress HTML, CSS, JavaScript, Text, XML and fonts
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
  AddOutputFilterByType DEFLATE application/x-font
  AddOutputFilterByType DEFLATE application/x-font-opentype
  AddOutputFilterByType DEFLATE application/x-font-otf
  AddOutputFilterByType DEFLATE application/x-font-truetype
  AddOutputFilterByType DEFLATE application/x-font-ttf
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE font/opentype
  AddOutputFilterByType DEFLATE font/otf
  AddOutputFilterByType DEFLATE font/ttf
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE image/x-icon
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/xml

  # Remove browser bugs (only needed for really old browsers)
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  Header append Vary User-Agent
</IfModule>

Кэширование статического контента в браузере

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

FileETag MTime Size
ExpiresActive On
ExpiresDefault "access plus 10 years"
<FilesMatch \.(html|xhtml|xml|shtml|phtml|php)$>
 ExpiresActive Off
</FilesMatch>

Или наоборот кэшируем лишь определенные форматы:

FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch ".(jpg|jpeg|gif|png|ico|css|js)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
</filesmatch>
</ifmodule>

Вот еще пример кода:

ExpiresActive On
ExpiresDefault A0

# 1 YEAR
<FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
ExpiresDefault A29030400
</FilesMatch>
# 1 WEEK
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
ExpiresDefault A604800
</FilesMatch>
# 3 HOUR
<FilesMatch "\.(txt|xml|js|css)$">
ExpiresDefault A10800"
</FilesMatch>

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

# 1 YEAR
<FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>
# 1 WEEK
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
# 3 HOUR
<FilesMatch "\.(txt|xml|js|css)$">
Header set Cache-Control "max-age=10800"
</FilesMatch>
# NEVER CACHE
<FilesMatch "\.(html|htm|php|cgi|pl)$">
Header set Cache-Control "max-age=0, private, no-store, no-cache, must-revalidate"
</FilesMatch>

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

ExpiresActive On
ExpiresByType text/css A315360000

Добавление или удаление слэша в конце url

Добавляем слеш в конце url

Если нужно редиректить например с адреса http://elims.org.ua/test на адрес http://elims.org.ua/test/, то используйте следующий код:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

Удаляем слеш в конце url

Если нужно редиректить например с адреса http://elims.org.ua/test/ на адрес http://elims.org.ua/test, то используйте следующий код:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteRule ^(.*)(/)$ $1 [L,R=301]

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

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