htaccess

Запрет доступа
Для всех:

deny from all

Запретить доступ для определённых IP:

# Запретить доступ по IP
Order Allow,Deny
Allow from all
Deny from 123.123.123.123
Deny from 122.122.122.122

Кроме Вашего IP:

order deny,allow 
deny from all 
allow from xxx.xxx.xxx.xxx

К определённому файлу (в данном случае к .htaccess):

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

К определённому файлу для всех, кроме Вашего IP:

<Files file.html>
order allow,deny
Allow from xxx.xxx.xxx.xxx
</Files>

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

<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>

запрет доступа к папке:

RedirectMatch 403 ^/папка/?$

запрет доступа к папке и всему, что внутри неё:

RedirectMatch 403 ^/папка/.*$

Запрет на просмотр директорий:

Options All -Indexes

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

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

Если вы не хотите видеть на своем сайте пользователей с конкретного домена, то вы можете запретить им доступ. Например, пользователей с нежелательных ресурсов (сайты для взрослых, хакерские сайты и т. д.) вы можете перенаправлять на страницу 403 Forbidden. Для этого необходимо включить mod_rewrite, хотя, как правило, он включен по умолчанию. Добавьте в .htaccess код:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} bannedurl1.com [NC,OR]
RewriteCond %{HTTP_REFERER} bannedurl2.com [NC,OR]
RewriteRule .* - [F]
</ifModule>

Вам необходимо заменить bannedurl1.com и bannedurl2.com доменами, которые вы хотите внести в черный список. Вы можете использовать флаг [NC], указывающий, что введенное доменное имя нечувствительно к регистру. Флаг [F] указывает на тип действия, в данном случае — отображение ошибки 403 Forbidden. Если вы хотите запретить несколько сайтов, используйте флаги [NC, OR] для каждого домена, если же вы хотите запретить использование одного домена — используйте только флаг [NC].
Если в ваших файлах журналов появились записи о посещении особых браузеров (это могут быть имитирующие работу браузера боты или пауки), вы можете запретить им доступ на свой сайт, добавив несколько строк в. htaccess:

RewriteEngine On 
RewriteBase / 
SetEnvIfNoCase Referer "^$" bad_user
SetEnvIfNoCase User-Agent "^badbot1" bad_user
SetEnvIfNoCase User-Agent "^badbot2" bad_user
SetEnvIfNoCase User-Agent "^badbot3" bad_user
Deny from env=bad_user

Замените badbot1, badbot1 и т. д. именами ботов из вашего журнала. Это закроет посторонним программам доступ к вашему сайту.
Если вы хотите установить главную страницу, отличную от стандартной (index.html, index.php, index.htm и т. д.), добавьте следующий код в файл .htaccess:

DirectoryIndex mypage.html

Замените mypage.html на URL страницы, которую вы хотите использовать в качестве главной.
Принудительное сохранение файла вместо открытия

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

Показ страницы в нужное время. В данном случае с 09.00 до 20.00 будет показана страница aaa.html в другое время bbb.html.

RewriteEngine on
    RewriteCond   %{TIME_HOUR}%{TIME_MIN} >0900
    RewriteCond   %{TIME_HOUR}%{TIME_MIN} <2000
    RewriteRule   ^foo.html$             aaa.html
    RewriteRule   ^foo.html$             bbb.html

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

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

Или так:

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

На серверах Apache за сжатие передаваемых данных отвечает модуль mod_deflate, который пришел на замену mod_gzip. Сниппет взят из из HTML5 Boilerplate шаблона.

# ------------------------------------------------------------------------------
# | Compression                                                                |
# ------------------------------------------------------------------------------
<IfModule mod_deflate.c>
    # Force compression for mangled headers.
    # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
    <IfModule mod_setenvif.c>
        <IfModule mod_headers.c>
            SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
            RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
        </IfModule>
    </IfModule>
    # Compress all output labeled with one of the following MIME-types
    # (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
    #  and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines
    #  as `AddOutputFilterByType` is still in the core directives).
    <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE application/atom+xml \
                                      application/javascript \
                                      application/json \
                                      application/rss+xml \
                                      application/vnd.ms-fontobject \
                                      application/x-font-ttf \
                                      application/x-web-app-manifest+json \
                                      application/xhtml+xml \
                                      application/xml \
                                      font/opentype \
                                      image/svg+xml \
                                      image/x-icon \
                                      text/css \
                                      text/html \
                                      text/plain \
                                      text/x-component \
                                      text/xml
    </IfModule>
</IfModule>

Блокирование ботов

#Блокируем плохих ботов и роботов
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]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]
<limit get="" post="" head="">
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</limit>

Ещё блокирование ботов

# Block Bad Bots
SetEnvIfNoCase User-Agent ([a-z0-9]{2000}) bad_bot
SetEnvIfNoCase User-Agent (archive.org|binlar|casper|checkpriv|choppy|clshttp|cmsworld|diavol|dotbot|extract|feedfinder|flicky|g00g1e|harvest|heritrix|httrack|kmccrew|loader|miner|nikto|nutch|planetwork|postrank|purebot|pycurl|python|seekerspider|siclab|skygrid|sqlmap|sucker|turnit|vikspider|winhttp|xxxyy|youda|zmeu|zune) bad_bot
Order Allow,Deny
Allow from All
Deny from env=bad_bot

Скачивание файла вместо проигрывания/открытия

<files *.mp4>
    forceType application/octet-stream
    Header set Content-Disposition attachment
</files>

Или так:

AddType application/octet-stream .mp4

Или так:

Options -Indexes
RewriteEngine on
RewriteBase /
options +FollowSymLinks
RewriteRule ^(.*)$ $1 [type='application/x']

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

Редирект с http на https

reg.ru
Вариант 1:

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Вариант 2:

RewriteEngine On
RewriteCond %{HTTPS} =on 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

Джино

RewriteEngine On  # Если этой строки нет выше
RewriteCond %{HTTP:X-Forwarded-Protocol} !=https
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Другие варианты

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Если возникает циклический редирект, то воспользуйтесь этим вариантом:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
BLOCK ACCESS TO XMLRPC.PHP

The method we used above disables XML-RPC, but the xmlrpc.php file is still accessible. It’s better to disable access to the file to prevent a worst-case hacking scenario.

<Files xmlrpc.php>
  <IfModule mod_authz_core.c>
    Require all denied
  </IfModule>
  <IfModule !mod_authz_core.c>
    Order allow,deny
    Deny from all
  </IfModule>
</Files>

Add the above code to your .htaccess file to disable access to xmlrpc.php.

Кеширование в браузере

<IfModule mod_expires.c>
  ExpiresActive On

  # Images
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/gif "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType image/webp "access plus 1 year"
  ExpiresByType image/svg+xml "access plus 1 year"
  ExpiresByType image/x-icon "access plus 1 year"

  # Video
  ExpiresByType video/mp4 "access plus 1 year"
  ExpiresByType video/mpeg "access plus 1 year"

  # CSS, JavaScript
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType text/javascript "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"

  # Others
  ExpiresByType application/pdf "access plus 1 month"
  ExpiresByType application/x-shockwave-flash "access plus 1 month"
</IfModule>
<ifModule mod_expires.c>

 ExpiresActive On
 #кэшировать флэш и изображения на одну неделю
 ExpiresByType image/x-icon "access plus 7 days"
 ExpiresByType image/jpeg "access plus 7 days"
 ExpiresByType image/png "access plus 7 days"
 ExpiresByType image/gif "access plus 7 days"
 ExpiresByType application/x-shockwave-flash "access plus 7 days"
 #кэшировать css, javascript и текстовые файлы на одну неделю
 ExpiresByType text/css "access plus 7 days"
 ExpiresByType text/javascript "access plus 7 days"
 ExpiresByType application/javascript "access plus 7 days"
 ExpiresByType application/x-javascript "access plus 7 days"
 #кэшировать html и htm файлы на один день
 ExpiresByType text/html "access plus 1 day"
 #кэшировать xml файлы на десять минут
 ExpiresByType application/xhtml+xml "access plus 10 minutes"
</ifModule>

ещё:

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/png "access 1 hour"
    ExpiresByType image/gif "access 1 hour"
    ExpiresByType image/jpeg "access 1 hour"
    ExpiresByType text/javascript "access 2 weeks"
    ExpiresByType text/css "access 2 months"
    ExpiresByType text/html "modification 4 hours"
    ExpiresDefault "access 2 days"
</IfModule>

ExpiresDefault директива необязательная директива , которая определяет срок действия для всех других типов файлов явно не установленных в ExpiresByType директиве. В этом примере срок действия любого файла, который не является файлом изображения, JavaScript или CSS, истекает через два дня.

Запрет кеширования CSS

<FilesMatch ".(css)$">
    Header append Cache-Control "no-store, no-cache, must-revalidate"
</FilesMatch>

Отключить нумерацию пользователей

Если злоумышленник введёт в строку адреса ваш-сайт.ru/?author=1, он будет перенаправлен на страницу пользователя с ID = 1.
В этом случае хакер будет знать имя пользователя, и ему останется только узнать пароль.
Даже если пользователи используют сложные пароли, злоумышленнику лучше не знать ID пользователей. Добавьте этот код в .htaccess:

RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]

или:

RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} ^author=\d+ [NC,OR]
RewriteCond %{QUERY_STRING} ^author=\{num
RewriteRule ^ - [L,R=403]

Или добавьте этот код в functions.php:

/* Redirect to Home page */
add_action('template_redirect', 'tb_template_redirect');
function tb_template_redirect()
{
if (is_author())
{
wp_redirect( home_url() ); exit;
}
}

Запретите доступ к важным файлам

Вы можете закрыть доступ к важным файлам wp-config.phphtaccessphp.ini и логам ошибок. Добавьте это правило из Кодекса Вордпресс:

<FilesMatch "^.*(error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)$">
Order deny,allow
Deny from all
</FilesMatch>

Если у вас есть файл php5.ini или php7.ini вместо php.ini, замените php.ini в первой строке на ваш файл.

Запретите доступ к PHP файлам

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

# Block access to PHP files
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]

Запретите доступ к папке wp-includes

В папке wp-includes находятся важные файлы, которые могут быть использованы для взлома сайта.

Добавьте это правило, чтобы защитить /wp-includes/:

# Block wp-includes folder and files
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

Защитить сайт от внедрения вредоносных скриптов

Запретите внедрение кода в php файлы. Добавьте это правило:

# Disallow change GLOBALS and _REQUEST
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

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

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

php_value upload_max_filesize 15M

Вы можете установить любое значение, в примере размер файла ограничен 15M (MБ). Помимо этого вы можете ограничить максимальный размер передаваемых при загрузке в PHP данных:

php_value post_max_size 10M

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

php_value max_execution_time 240

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

php_value max_input_time 180

Установите вместо 180 любое требуемое вам время (в секундах).