.htaccess это простой текстовый файл, который позволяет вам контролировать, как ваш веб-сервер обрабатывает запросы. Хотя изначально он был разработан для управления доступом к каталогам, теперь он служит многим другим целям.
Это руководство не является глубоким погружением в .htaccess а скорее практическое введение с набором полезных фрагментов кода. В то время как .htaccess мощный, это не значит, что вы должны использовать его для всего. Понимание того, когда и как его применять, может улучшить безопасность, производительность и функциональность вашего веб-сайта.
Что .htaccess?
.htaccess файл, сокращение от «гипертекстовый доступ», представляет собой файл конфигурации, который в основном используется Apache серверы. Позволяет пользователям контролировать права доступа, защищать паролем каталоги, настраивать перенаправления, настраивать страницы ошибок и блокировать определенные IP-адреса.
В сочетании с файлом .htpasswd он обеспечивает детальный контроль доступа к каталогу для нескольких пользователей. Многие хостинг-провайдеры поддерживают .htaccess, но это не универсально — некоторые веб-серверы, такие как Nginx, используют другие методы.
Где найти ваш .htaccess Файл?
По умолчанию, .htaccess файл скрыт в файловом менеджере cPanel и других панелях управления хостингом. Вы можете показать его, включив опцию «Показать скрытые файлы» в настройках файлового менеджера.
Если вы не можете найти файл, не паникуйте – возможно, его еще нет. В большинстве случаев он должен быть в корневом каталоге вашего веб-сайта, обычно называемом public_html или www. Если вы управляете несколькими веб-сайтами под одной учетной записью хостинга, у каждого сайта может быть свой собственный .htaccess файл в соответствующей папке.
Большинство системных файлов, которые начинаются с точки (.), скрыты. Если ваш .htaccess файл не виден, проверьте настройки хостинга или создайте его вручную в текстовом редакторе.
.htaccess Шпаргалка и примеры кода
В то время как .htaccess может сделать многое, знание правильных команд является ключевым. Чтобы облегчить задачу, мы составили шпаргалку с наиболее часто используемыми .htaccess правила. Нужно ли вам блокировать плохих ботов, принудительно HTTPS, настроить страницы ошибок или улучшить SEO, ниже вы найдете готовые к использованию фрагменты кода.
Просто скопируйте, вставьте и настройте их под свои нужды. Давайте погрузимся!
Внимание: Пожалуйста, дважды проверьте и подтвердите любые правила перед их использованием. Мы не несем ответственности за любые проблемы, которые могут возникнуть — используйте их на свой страх и риск. Кроме того, большинство правил требуют RewriteEngine On директива в вашем .htaccess файл для правильной работы.
Правила перезаписи и перенаправления
Обслуживайте все запросы одним PHP Файл с .htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*)$ /index.php [NC,L,QSA]
WordPress .htaccess для постоянных ссылок с .htaccess
(Это единственное правило в этом разделе, которое включает правило RewriteEngine.)
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Принудительно www с .htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301,NC]
Форсировать www в общем виде с помощью .htaccess
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Принудительно использовать не-www .htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
Принудительно использовать не-www в общем виде с .htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]
Форс-мажор HTTPS с .htaccess
Используйте это для перенаправления не HTTPS запросы к HTTPS запрос. То есть, если вы зайдете на https://example.com/, то произойдет перенаправление на https://example.com.
RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Форс-мажор HTTPS За прокси-сервером с .htaccess
Полезно, если перед вашим сервером установлен прокси-сервер, выполняющий терминацию TLS.
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Принудительный завершающий слэш с .htaccess
Используйте следующее .htaccess правило для перенаправления любых URL на тот же URL (но с завершающим слешем) для любых запросов, которые не заканчиваются завершающим слешем. То есть перенаправление с https://example.com/your-page на https://example.com/your-page/
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
Удалить завершающий слеш с помощью .htaccess
Используйте это, чтобы удалить любой завершающий слеш (будет выполнено 301-перенаправление на URL без завершающего слеша)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]
Перенаправление одной страницы с помощью .htaccess
Перенаправление одного URL-адреса на новое место
Redirect 301 /oldpage.html https://www.yoursite.com/newpage.html
Redirect 301 /oldpage2.html https://www.yoursite.com/folder/
Псевдоним единого каталога с .htaccess
RewriteEngine On
RewriteRule ^source-directory/(.*) target-directory/$1
Пути псевдонимов для скрипта .htaccess
RewriteEngine On
RewriteRule ^$ index.fcgi/ [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L]
Этот пример имеет index.fcgi файл в некотором каталоге, и любые запросы внутри этого каталога, которые не могут разрешить имя файла/каталог, будут отправлены в index.fcgi сценарий. Хорошо, если вы хотите baz.foo/some/cool/path быть обработанным baz.foo/index.fcgi (который также поддерживает запросы на baz.foo) при сохранении baz.foo/css/style.css и тому подобное.
Перенаправить весь сайт с помощью .htaccess
Используйте следующее .htaccess правило для перенаправления всего сайта на новое место/домен
Redirect 301 / https://newsite.com/
Этот способ делает это с целыми ссылками. То есть www.oldsite.com/some/crazy/link.html станет www.newsite.com/some/crazy/link.html. Это чрезвычайно полезно, когда вы просто «переносите» сайт на новый домен.
Псевдоним «Чистые» URL-адреса с .htaccess
Этот фрагмент позволяет использовать «чистые URL-адреса» — те, которые не содержат PHP расширение, например example.com/users вместо example.com/users.php.
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^.]+)$ $1.php [NC,L]
Правила безопасности
Запретить любой доступ с помощью .htaccess
Если вы хотите запретить Apache обслуживать какие-либо файлы, используйте следующее.
Это остановит ваш доступ к вашему веб-сайту. Если вы хотите запретить любой доступ, но при этом иметь возможность просматривать его самостоятельно, пожалуйста, прочтите следующее правило:
Deny from all
Запретить любой доступ, кроме вашего (разрешить только определенным IP-адресам) с помощью .htaccess
Используйте эту функцию, чтобы разрешить доступ к вашему сайту только с определенных IP-адресов.
# Require all denied
# Require ip xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx ваш IP. Если вы замените последние три цифры на 0/12, например, это укажет диапазон IP-адресов в пределах одной сети, что избавит вас от необходимости перечислять все разрешенные IP-адреса по отдельности.
Пожалуйста, смотрите следующее правило, которое является «противоположностью» этому правилу!
Заблокировать IP-адрес с помощью .htaccess
Это разрешит доступ ко всем IP-адресам, кроме перечисленных. Вы можете использовать это, чтобы разрешить доступ всем, кроме IP-адресов спамеров.
Замените xxx.xxx.xxx.xxx и xxx.xxx.xxx.xxy на IP-адреса, которые вы хотите заблокировать.
Apache 2.4
# Require all granted
# Require not ip xxx.xxx.xxx.xxx
# Require not ip xxx.xxx.xxx.xxy
Разрешить доступ только из локальной сети с .htaccess
order deny,allow
deny from all
allow from 192.168.0.0/24
Запретить доступ определенным агентам пользователей (ботам) с помощью .htaccess
Используйте этот .htaccess правило для блокировки/бана определенных пользовательских агентов
RewriteCond %{HTTP_USER_AGENT} ^User\ Agent\ 1 [OR]
RewriteCond %{HTTP_USER_AGENT} ^Another\ Bot\ You\ Want\ To\ Block [OR]
RewriteCond %{HTTP_USER_AGENT} ^Another\ UA
RewriteRule ^.* - [F,L]
Запретить доступ к скрытым файлам и каталогам с помощью .htaccess
Скрытые файлы и каталоги (те, имена которых начинаются с точки .) следует большую часть времени, если не все, быть защищенным. Например: .htaccess, .htpasswd, .git, .hg.
RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule "(^|/)\." - [F]
В качестве альтернативы вы можете просто поднять Not Found ошибка, не дающая злоумышленнику ни малейшего понятия:
RedirectMatch 404 /\..*$
Запретить доступ к определенным файлам с помощью .htaccess
Используйте это, чтобы заблокировать или запретить доступ к определенным файлам.
<files your-file-name.txt>
order allow,deny
deny from all
</files>
Запретить доступ к резервным копиям и исходным файлам с помощью .htaccess
Эти файлы могут быть оставлены некоторыми текстовыми/html-редакторами (например, Vi/Vim) и представлять большую угрозу безопасности, если кто-либо может получить к ним доступ.
<FilesMatch "(\.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|swp)|~)$">
## Apache 2.2
Order allow,deny
Deny from all
Satisfy All
## Apache 2.4
# Require all denied
</FilesMatch>
Отключить просмотр каталогов с помощью .htaccess
Options All -Indexes
Включить списки каталогов с .htaccess
Options All +Indexes
Отключить вывод определенных типов файлов с помощью .htaccess
Используйте это, чтобы исключить определенные типы файлов из списка Apache листинг каталога. Вы можете использовать это, чтобы остановить отображение файлов .pdf или видеофайлов.
IndexIgnore *.zip *.mp4 *.pdf
Отключить хотлинкинг изображений с помощью .htaccess
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
Перенаправить хотлинкеров и показать другое изображение с помощью .htaccess
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?your-website.com/.*$ [NC]
RewriteRule \.(gif|jpg|png)$ https://www.your-website.com/do-not-hotlink-our-content.jpg [R,L]
Запретить доступ определенным реферерам .htaccess
Используйте это правило, чтобы заблокировать доступ к запросам, включающим реферер из определенного домена.
RewriteCond %{HTTP_REFERER} block-this-referer\.com [NC,OR]
RewriteCond %{HTTP_REFERER} and-block-traffic-that-this-site-sends\.com [NC]
RewriteRule .* - [F]
Защитите каталог паролем с помощью .htaccess
Сначала вам нужно создать файл .htpasswd где-нибудь в системе. Выполните следующую команду в командной строке:
htpasswd -c /home/hidden/directory/here/.htpasswd the_username
Затем вы можете использовать его для аутентификации. В вашем .htaccess файл вам нужно что-то вроде следующего кода, но убедитесь, что AuthUserFile — это путь к файлу .htpasswd, который вы только что создали. Вам следует сохранить .htpasswd в каталоге, недоступном через веб. Поэтому не помещайте его в каталог /public_html/ или /www/.
AuthType Basic
AuthName "Password Protected Dir Title"
AuthUserFile /home/hidden/directory/here/.htpasswd
Require valid-user
Защитите паролем файл или несколько файлов с помощью .htaccess
AuthName "Password Protected Directory Title"
AuthType Basic
AuthUserFile /home/hidden/directory/here/.htpasswd
<Files "/a-private-file.txt">
Require valid-user
</Files>
<FilesMatch ^((one|two|three)-rings?\.o)$>
Require valid-user
</FilesMatch>
Правила производительности
Сжатие текстовых файлов с помощью .htaccess
<IfModule mod_deflate.c>
# Force compression for mangled headers.
# https://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>
Установить заголовки Expires с .htaccess
Истекает заголовки сообщить браузеру, следует ли запрашивать определенный файл с сервера или просто извлечь его из кэша. Рекомендуется устанавливать заголовки expires статического контента на что-то далекое в будущем.
Если вы не контролируете управление версиями с помощью очистки кэша на основе имен файлов, рассмотрите возможность уменьшения времени кэширования для таких ресурсов, как CSS и JS, примерно до 1 недели.
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 year"
# Data interchange
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
# Favicon (cannot be renamed!)
ExpiresByType image/x-icon "access plus 1 week"
# HTML components (HTCs)
ExpiresByType text/x-component "access plus 1 month"
# HTML
ExpiresByType text/html "access plus 0 seconds"
# JavaScript
ExpiresByType application/javascript "access plus 1 year"
# Manifest files
ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
ExpiresByType text/cache-manifest "access plus 0 seconds"
# Media
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# Web feeds
ExpiresByType application/atom+xml "access plus 1 hour"
ExpiresByType application/rss+xml "access plus 1 hour"
# Web fonts
ExpiresByType application/font-woff2 "access plus 1 month"
ExpiresByType application/font-woff "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
ExpiresByType application/x-font-ttf "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
</IfModule>
Выключите eTags с помощью .htaccess
Удаляя заголовок ETag, вы лишаете кэши и браузеры возможности проверять файлы, поэтому им приходится полагаться на ваши заголовки Cache-Control и Expires.
<IfModule mod_headers.c>
Header unset ETag
</IfModule>
FileETag None
Ограничить размер загружаемого файла с помощью .htaccess
Укажите размер файла в байтах. Приведенный ниже код ограничивает его до 1 МБ.
LimitRequestBody 1048576
Разные правила
Переменные сервера для mod_rewrite с .htaccess
%{API_VERSION}
%{DOCUMENT_ROOT}
%{HTTP_ACCEPT}
%{HTTP_COOKIE}
%{HTTP_FORWARDED}
%{HTTP_HOST}
%{HTTP_PROXY_CONNECTION}
%{HTTP_REFERER}
%{HTTP_USER_AGENT}
%{HTTPS}
%{IS_SUBREQ}
%{REQUEST_FILENAME}
%{REQUEST_URI}
%{SERVER_ADDR}
%{SERVER_ADMIN}
%{SERVER_NAME}
%{SERVER_PORT}
%{SERVER_PROTOCOL}
%{SERVER_SOFTWARE}
%{THE_REQUEST}
Поставьте PHP Переменные с .htaccess
php_value <key> <val>
Например:
php_value upload_max_filesize 50M
php_value max_execution_time 240
Пользовательские страницы ошибок с .htaccess
ErrorDocument 500 "Houston, we have a problem."
ErrorDocument 401 https://error.yourdomain.com/mordor.html
ErrorDocument 404 /errors/halflife3.html
Перенаправьте пользователей на страницу обслуживания, пока вы обновляете .htaccess
Это перенаправит пользователей на страницу обслуживания, но позволит получить доступ к вашему IP-адресу. Измените 555.555.555.555 на ваш IP-адрес, а YourMaintenancePageFilenameOrFullUrlUrl.html на вашу страницу с ошибкой (или полный URL-адрес на другом домене).
ErrorDocument 403 YourMaintenancePageFilenameOrFullUrlUrl.html
Order deny,allow
Deny from all
Allow from 555.555.555.555
Принудительная загрузка с .htaccess
Иногда вы хотите заставить браузер загрузить какой-то контент вместо его отображения. Следующий фрагмент поможет.
<Files *.md>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
Отключить отображение информации о сервере (подпись сервера) с помощью .htaccess
Хотя многие считают это бессмысленным (особенно с точки зрения безопасности), если вы хотите, чтобы ваш сервер не выдавал информацию о нем (операционную систему и т. д.), используйте это:
ServerSignature Off
Запретить загрузку с помощью .htaccess
Иногда вы хотите заставить браузер отображать какой-то контент вместо его загрузки. Следующий фрагмент поможет.
<FilesMatch "\.(tex|log|aux)$">
Header set Content-Type text/plain
</FilesMatch>
Разрешить кросс-доменные шрифты с .htaccess
CDN-served веб-шрифты могут не работать в Firefox или IE из-за CROS. Следующий фрагмент из alrra должен это сделать.
<IfModule mod_headers.c>
<FilesMatch "\.(eot|otf|ttc|ttf|woff|woff2)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
Автоматическое кодирование UTF-8 с .htaccess
Иметь Apache автоматически кодировать ваш контент в UTF-8, используйте следующий код. Вы также можете заменить utf-8 на другой набор символов, если необходимо:
# Use UTF-8 encoding for anything served text/plain or text/html
AddDefaultCharset utf-8
# Force UTF-8 for a number of file formats
AddCharset utf-8 .atom .css .js .json .rss .vtt .xml
Установите часовой пояс сервера (UTC или другой часовой пояс) с помощью .htaccess
SetEnv TZ UTC
См. список часовых поясов. Чтобы установить часовой пояс Лос-Анджелеса:
SetEnv TZ America/Los_Angeles
Переключиться на другой PHP Версия с .htaccess
Если вы используете общий хостинг, скорее всего, существует более одной версии PHP установлен, и иногда вам нужна определенная версия для вашего сайта. Например, требуется PHP >= 5.4. Следующий фрагмент должен переключить PHP версия для вас.
AddHandler application/x-httpd-php55 .php
В качестве альтернативы вы можете использовать AddType
AddType application/x-httpd-php55 .php
Отключить режим совместимости Internet Explorer
Просмотр совместимости в IE может повлиять на то, как отображаются некоторые веб-сайты. Следующий фрагмент должен заставить IE использовать Edge Rendering Engine и отключите просмотр в режиме совместимости.
<IfModule mod_headers.c>
BrowserMatch MSIE is-msie
Header set X-UA-Compatible IE=edge env=is-msie
</IfModule>
Выполнить PHP с другим расширением файла с .htaccess
Следующий код запустит файлы, заканчивающиеся на .ext, с помощью php:
AddType application/x-httpd-php .ext
Автоматически обслуживать изображения WebP, если они существуют
Если изображения WebP поддерживаются и изображение с расширением .webp и тем же именем находится в том же месте, что и изображение jpg/png, которое будет передано, то вместо него передается изображение WebP.
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]
Настройка хостинга может быть сложной. Поэтому мы создали HostScore Помощь в настройке — готовая услуга по правильной настройке вашего хостинга.
Мы помогаем с SSL установка, настройка DNS и сервера имен, WordPress Установка или миграция, а также настройка безопасности. Единоразовая плата. Гарантия 100% возврата средств.
Ознакомьтесь с нашими услугамиПодводя итог
.htaccess file — мощный инструмент, но важно использовать его с умом. Хотя может возникнуть соблазн добавить дополнительные правила для быстрых исправлений, помните, что .htaccess не является основным файлом конфигурации.
Каждый раз, когда сервер сталкивается с .htaccess файл, он должен прочитать и выполнить его, переопределив основные параметры конфигурации. Этот процесс потребляет ресурсы и может замедлить работу вашего веб-сайта, особенно если он используется слишком часто. По возможности применяйте конфигурации непосредственно на уровне сервера (например, в Apacheосновной конфигурационный файл) для лучшей производительности.
Работая с .htaccess эффективно и сочетая это с хорошо оптимизированный план хостинга – вы можете повысить безопасность, производительность и масштабируемость своего сайта
Частые вопросы
Должен ли я использовать .htaccess?
В глобальном смысле использования .htaccess file может предложить много удобства. Однако это приводит к потенциально высоким затратам ресурсов сервера. Где это возможно, полагайтесь на конфигурацию основного сервера, а не на .htaccess .
Как узнать, .htaccess работает?
Самый простой способ обеспечить вашу безопасность .htaccess Чтобы убедиться, что файл работает, перейдите по URL-адресу каталога, в который вы его поместили. Если файл не работает, вы, скорее всего, столкнетесь с внутренней ошибкой сервера 500.
Могу ли я иметь несколько .htaccess файлы?
.htaccess Файлы технически могут быть размещены в каждом каталоге, который вы хотите настроить. Если вы запускаете несколько веб-сайтов, каждый домашний каталог может иметь свой собственный файл – вместе с одним в каждом подкаталоге ниже.
Что такое правило перезаписи в htaccess?
Переписать - это Apache модуль, который позволяет вам переписывать URL-запросы. Он просто принимает входящий запрос и направляет его к тому, который вы указали, чтобы занять его место.