Синтаксис htaccess полное руководство

Время на прочтение
8 мин

Количество просмотров 9.7K

Let’s begin from a far distance with the goal that the novices can see how the file described in the article works. To work the website on the Internet, you need not just a PC and access to the network, yet additionally, extraordinary programming introduced on it, which gives access to information utilizing the HTTP and HTTPS conventions. This product is the web server. There are different sorts of web servers, however, the most widely recognized is Apache. It is based on the open-source code, free, is continually being improved and enhanced, compatible with many scripts, and works on almost all platforms, including Windows, Linux, Netware 5.x.

Apache is arranged by means of design documents that are put away in content organization. With their assistance, you can set explicit standards of activity of the web server. The principle design record is called httpd.conf or apache.conf (contingent upon the OS conveyance). Much of the time, all server setups can be determined here, and essentially this technique is best in light of the fact that:

reduces the response time of the web server when mentioned (so every time the web server is gotten to, Apache won’t peruse all catalogues for .htaccess); a few orders, for instance, mod_rewrite module orders, in numerous regards, work better from the principle design record.

Be that as it may, not all clients of the server may approach this document (for instance, on account of shared facilitating), so the rest is offered an extra web server arrangement record — .htaccess (with a dab toward the start of the name).

Table of contents

  1. What does .htaccess stand for
  2. How to create a .htaccess file
  3. .htaccess syntax
  4. .htaccess opportunities
  5. Access control
  6. Working with web-server errors
  7. Adjusting redirect 301 in htaccess
  8. mod rewrite redirecting module
  9. Defining encoding
  10. Other opportunities
  11. If .htaccess does not work
  12. A few more several tips on working with .htaccess
  13. Useful links

What is .htaccess and what is it for?

The file (or files) .htaccess will set the rules for the web server only in the directory where it is located and its child directories, without global changes in the operation of the entire server. The ability to use .htaccess is prescribed by a directive (i.e., a command) — AllowOverride — in the main configuration file httpd.conf, the name of which directly indicates that the settings inside .htaccess take priority over the settings in httpd.conf (unless otherwise limited by all same directive AllowOverride). With this directive, you can allow everything, and you can — just some actions. Detailed instructions for its use can be found on the Apache website.

With it, each time a web server is accessed, Apache will scan all directories for .htaccess. Changes in the file are valid immediately after saving — the restart of the entire web server is not needed (unlike changes in httpd.conf).

The name of the .htaccess file is common, but not at all mandatory. You can set a different name in httpd.conf using the AccessFileName directive, for example:

AccessFileName .config

How to create a .htaccess file

As already mentioned, the configuration files have a text format, and you can also create .htaccess using a text editor (for example, Notepad or NotePad ++ in Windows).

The file name is .htaccess (with a dot at the beginning);

type — “All files”;

word wrap;

ASCII mode (when uploading .htaccess to a hosting using an FTP protocol).

Apache is a case-sensitive web server, so it is important to write the name in small letters: .HTaccess and .htaccess are different files.

Mac OS files starting with a dot are invisible. Therefore, you can call it differently and after, transferring via FTP to the hosting, rename it. Usually they place the file in the root directory of the web server (/ public_html) or in the root directory of the site (/public_html/site.com/).

.htaccess syntax

The .htaccess syntax is similar to the httpd syntax. For each directive, a separate line is assumed. For your own convenience, you can add comments to the file using the # sign, and the value after # will be ignored by the web server. This trick can be used to disable any directive. It does not need to be removed completely from the file — just comment it out.

The possibilities of the configuration file are enormous. Below are the basic settings in .htaccess.

.htaccess opportunities

Access control

Web access ban:

Order Deny, Allow
Deny from all

Web access ban, except for IP:

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

Web access ban for IP:

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

File access ban:

<Files private.html >
Order allow, deny
Deny from all

Directory security with the password:

AuthType Basic     
AuthName "Directory Name"
AuthUserFile /home/cpanel_user/.htpasswds/public_html/smth/passwd
require valid-user

# where AuthName "Directory Name is the secured directory name, аnd 
# /home/cpanel_user/.htpasswds/public_html/smth/passwd is the file location with the password.

Working with the web-server errors

Sometimes, instead of the expected page, a visitor may encounter a web server response in the form of an error with a concise, but not always clear for a simple user, explanation of the reason. A complete list of status codes can be found on Wikipedia. For the most common (for example, 404 or 500 errors), it is desirable to create your own page that looks better and presents the exit route to the visitor. It is set as follows:

ErrorDocument 404 yourdomain.com/error/404.html
# where yourdomain.com/error/404.html is the path to the created page.

Adjusting the redirect 301 in htaccess

To create a permanent redirect, the directive 301 redirect is used, which transfers the entire weight of the page to a new url (therefore, it is preferable to a 302 redirect for SEO purposes).

Redirecting the entire site to a new domain:

Redirect 301 / http://www.newdomain.com/

Redirect page to new:

Redirect 301 /page1.html http://mydomain.com/page2.html

Mod rewrite redirect module

The mod_rewrite module is an indispensable mechanism for changing URLs “on the fly”. Its utility, and at the same time, the difficulty lies in the fact that you can use a myriad of rules that include even more variables.

For the module to work, first of all we need directives

RewriteEngine On (includes the conversion engine)

Options FollowSymLinks (mod_rewrite operation condition).

If the server administrator has disabled this option for the user directory, then the conversion mechanism cannot be used. This restriction is imposed on virtual hosting servers for security purposes.

For further acquaintance with the module we recommend to refer to the source.

RewriteRule

One of the most functional directives of the mod_rewrite module is the RewriteRule. To specify the condition under which the rule will work, the RewriteCond directive is used. It (one or more) must be prescribed before the RewriteRule.

Redirect page to new domain:

RewriteRule ^ page1  .html $ http://newdomain.com/ [R = 301]

Redirecting a site from a domain without www to a domain from www:

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

And vice versa:

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

HTTPS redirection (you must first install an HTTPS certificate):

RewriteEngine On
RewriteCond% {https}! On
RewriteRule (. *) Https: //% {HTTP_HOST}% {REQUEST_URI} [R = 301, L]

These lines must be placed at the very top of .htaccess.

Defining the encoding

The symbol table in which to open the site is determined by the browser. However, you can set the default encoding:

AddDefaultCharset UTF-8

Such a change applies within .htaccess and to all pages of the site. You can set the encoding for a specific type of file, for example windows-1251 for html:

AddType "application / x-httpd-php3; charset = windows-1251" .html

Often the page itself carries in itself (namely in the title) information about the encoding used. It is necessary to check that the specified encoding in the document and in the configuration file matches. The utf-8 given here is almost always required when working with popular cms, since they are designed for a wide range of users around the world. By the way, by default, the same encoding is configured on our shared hosting servers.

Other opportunities

— Determine the site index file:

By default, the index page is considered index.html. With the help of the following directive, you can specify another file name that comes off first when accessing the directory:

DirectoryIndex index.php

— A useful directive is FilesMatch, which specifies the limits of the rule by file name using regular expressions. With its help, for example, you can deny access to certain files:

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

There are some directives that are not supported on our shared hosting servers, but you can allow them on your VPS, for example.

The reason is that the web server running as suPHP does not support php_flag and php_value. Therefore, we suggest using cPanel (the subsection “Choosing a PHP Version” subsection is extremely useful, to work with error_log — “Error Log”) or to create a local php.ini file for this purpose. We did bring a couple of directives below:

— In order to avoid a web server freeze when processing incorrectly written scripts, there is max_execution_time. With its help, the time in seconds allocated for processing the PHP script is indicated. You can increase the timeout of the web server when executing the script:

php_value max_execution_time 60

— Determine the maximum upload file size:

php_value upload_max_filesize 128M (here, instead of 128, put the desired value)

— Print PHP errors into a separate file:

php_flag log_errors on
php_value error_log /home/path/to/public_html/domain/PHP_errors.log
# PHP_errors.log is the name of the file, and
# / home / path / to / public_html / domain - the path to it).

P.S. On a shared hosting, it is difficult to accurately determine which directives will work in .htaccess, because many of those that lead to a web server configuration change are prohibited for obvious reasons — these changes will affect all users on the media.

If .htaccess does not work

You can check the file operation by writing simple directives that, with the correct syntax and correct httpd settings (as described at the beginning of the article) should work:

— for example, by denying access to the site from the outside using a directive

Order deny, allow
Deny from all

— or writing to the file a set of meaningless characters that are not directives. If the web server interacts with htaccess, then, of course, it will not be able to read them and give 500 error.

If the problem really exists, you must first look for the cause in the main configuration file:

— make sure that the server allows the use of the .htaccess file: there is an AllowOverride All entry (and it is not commented out using #);

— verify that a VirtualHost entry has been created for the domain. As an example:

<VirtualHost *: 80>
DocumentRoot / www / example1
ServerName www.example.com
# Other directives
</ Virtualhost>

— the name of the additional configuration file is indicated as you need. If it is .htaccess, then:

AccessFileName .htaccess

— the hostname of the server is present (specified when creating URL redirects) as the IP address of the server or domain:

ServerName www.example.com

If the reason is not in httpd, you need to check .htaccess itself for syntax errors. You can use online services (for example, www.htaccesscheck.com, htaccess.madewithlove.be), or — the original source, where there is a complete list of directives, along with the syntax.

A few more several tips on working with .htaccess

It is highly desirable to make a backup copy of the file before any editing, so that at the worst outcome you can “roll back” the changes back.

We recommend making changes step by step, using a minimum of directives — and in case of failure it will be easier to calculate which rule caused the error.

Although the changes take effect immediately, the browser’s cache hasn’t been canceled — to check the work of the site after editing .htaccess, use it to clean it regularly or load the page to bypass the cache — via the key combination Ctrl + F5 (in Safari: Ctrl + R, on Mac OS: Cmd + R).

The most common web server error when working with .htaccess is 500, and either it indicates a problem in the syntax (typo in a directive, for example), or this type of directive is not allowed in the main configuration file.

Useful links

Inspiration for working with .htaccess:
httpd.apache.org/docs/2.2/howto/htaccess.html
Many instructions for working with .htacess:
htaccess.net.ru
Blogging platform for programmers:
writeabout.tech
Simple directive generator for .htaccess:
htaccess.ru/generator

In case .htaccess file is not enough for you to make changes in the web server configuration file, you can rent an allocated server in Europe or the USA. These servers can provide you with an opportunity to make changes in the Apache’s settings.

Buy reddit upvotes — reddit-marketing.pro
Reddit upvoting bot
Buy Reddit Accounts
Buy Medium Claps
Buy Quora Upvotes
Buy Linkedin connections

Apache — самый распространённый HTTP-сервер. Распространяется бесплатно, включая исходные тексты. Поддерживаются сценарии на CGI (включая FastCGI), PHP, Perl, Java. Аутентификация — базовая, message-digest, TLS (SSL). С апреля 1996 это самый популярный HTTP-сервер в Интернете, в августе 2007 года он работал на 51% всех веб-серверов.

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

.htaccess является подобием httpd.conf с той разницей, что действует только на каталог, в котором располагается, и на его дочерние каталоги. Возможность использования .htaccess присутствует в любом каталоге пользователя.

Файл .htaccess может быть размещен в любом каталоге сайта. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).

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

  • Директивы простого перенаправления (редирект);
  • Директивы сложного перенаправления (mod_rewrite);
  • Индексные страницы;
  • Обработка ошибок;
  • Кодировка;
  • Управление доступом;
  • Паролирование директорий;
  • Указание опций PHP.

Список всех доступных директив можно посмотреть тут.

Директивы простого перенаправления (редирект)

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

Redirect / http://www.example.com
# http://www.example.com - URL, на который мы перенаправляем запросы

Более сложный пример — мы хотим определенные страницы нашего сайта переадресовывать на другие сайты:

Redirect /linux http://www.linux.org
Redirect /linux/download.html http://www.linux.org/dist/download_info.html
Redirect 301 /kernel http://www.linux.org

Теперь при обращении к http://mysite.ru/linux будет открываться http://www.linux.org, а при обращении к http://mysite.ru/linux/download.html будет http://www.linux.org/dist/download_info.html . В последнем примере WEB-сервер будет передавать код 301, что означает «документ перемещен постоянно».

Синтаксис команды Redirect выглядит следующим образом:

Redirect [status] URI_LOCAL URL_REDIRECT

status : необязательное поле, определяет код возврата. Допустимые значения:

    * permanent (301 — документ перемещен постоянно)
    * temp (302 — документ перемещен временно)
    * seeother (303 — смотрите другой)
    * gone (410 — убран)

URI_LOCAL : локальная часть URL запрашиваемого документа.

URL_REDIRECT : URL, куда должен быть выполнен редирект.

Директива RedirectMatch аналогична директиве Redirect за исключением того, что в RedirectMatch возможно использование регулярных выражений, что, несомненно, может быть удобно в некоторых условиях. Например, для организации передачи параметров скрипту в теле URL:

RedirectMatch /(.*)/(.*)/index.html$ http://mysite.ru/script.php?par1=$1&par2=$2

Хотя данный пример и вызовет перезагрузку страницы, в дальнейшем его можно будет улучшить. Здесь необходимо сделать небольшое лирическое отступление и поговорить о синтаксисе регулярных выражений.

В регулярном выражении можно использовать любые печатные символы и пробел, но часть символов имеет особое значение:

  • Круглые скобки () используются для выделения групп символов. В дальнейшем к ним можно обращаться по номеру.
  • Символ ^ обозначает начало строки.
  • Символ $ обозначает конец строки.
  • Символ . обозначает любой символ.
  • Символ | обозначает альтернативу. Например, выражения «A|B» означают «A или B».
  • Символ ? ставится после символа (группы), который может как присутствовать, так и отсутствовать.
  • Символ * ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд.
  • Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз.
  • Квадратные скобки [] используются для перечисления допустимых символов.
  • Квадратные скобки [^] используются для перечисления недоступных символов.
  • Символ ставится перед спецсимволами, если они нужны в своем первозданном виде.
  • Все, что расположено после символа ‘#‘, считается комментарием.

Это все основные примитивы, с помощью которых можно построить любое регулярное выражение.

Директивы сложного перенаправления (mod_rewrite)

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

Данный модуль представляет собой основанный на правилах механизм (синтаксический анализатор с применением регулярных выражений), выполняющий URL-преобразования на лету. Модуль поддерживает неограниченное количество правил и связанных с каждым правилом условий, реализуя действительно гибкий и мощный механизм управления URL. URL-преобразования могут использовать разные источники данных, например, переменные сервера, переменные окружения, заголовки HTTP, время и даже запросы к внешним базам данных в разных форматах для получения URL нужного Вам вида.

Директива RewriteCond определяет условие, при котором происходит преобразование. RewriteCond определяет условия для какого-либо правила. Перед директивой RewriteRule располагаются одна или несколько директив RewriteCond. Следующее за ними правило преобразования используется только тогда, когда URI соответствует условиям этой директивы, а также условиям этих дополнительных директив.

Под обратной связью подразумевается использование частей сравниваемых URL для дальнейшего использования, т.е. передачи параметров или для построения нового URL.

  • $N — (0 <= N <= 9) предоставляющие доступ к сгруппированным частям (в круглых скобках!) шаблона из соответствующей директивы RewriteRule (единственной, следующей сразу за текущим набором директив RewriteCond).
  • %N — (1 <= N <= 9) предоставляющие доступ к сгруппированным частям (в круглых скобках!) шаблона из соответствующей директивы RewriteCond в текущем наборе условий.
  • %{NAME_OF_VARIABLE} — где NAME_OF_VARIABLE может быть одной из ниже приведенных переменных

Ниже приводится список всех доступных переменных %{NAME_OF_VARIABLE} с их кратким описанием.

  • HTTP_USER_AGENT — Содержит информацию о типе и версии браузера и операционной системы посетителя.
  • HTTP_REFERER — Приводится адрес страницы, с которой посетитель пришёл на данную страницу.
  • HTTP_COOKIE — Список COOKIE, передаваемых браузером.
  • HTTP_FORWARDED — Cодержит IP-адрес прокси-сервера или сервера балансировки нагрузки.
  • HTTP_HOST — Адрес сервера, например, beget.com .
  • HTTP_ACCEPT — Описываются предпочтения клиента относительно типа документа.
  • REMOTE_ADDR — IP-адрес посетителя.
  • REMOTE_HOST — Адрес посетителя в нормальной форме — например, rt99.net.ru .
  • REMOTE_IDENT — Имя удаленного пользователя. Имеет формат имя.хост, например, kondr.www.rtt99.net.ru
  • REMOTE_USER — Тоже, что и REMOTE_IDENT, но содержит только имя. Пример: kondr
  • REQUEST_METHOD — Позволяет определить тип запроса (GET или POST). Должен обязательно анализироваться, т.к. определяет дальнейший способ обработки информации.
  • SCRIPT_FILENAME — Полный путь к веб-странице на сервере.
  • PATH_INFO — Содержит в себе все, что передавалось в скрипт.
  • QUERY_STRING — Содержит строчку, переданную в качестве запроса при вызове CGI скрипта.
  • AUTH_TYPE — Используется для идентификации пользователя
  • DOCUMENT_ROOT — Cодержит путь к корневой директории сервера.
  • SERVER_ADMIN — Почтовый адрес владельца сервера, указанный при установке.
  • SERVER_NAME — Адрес сервера, например, kondr.beget.com
  • SERVER_ADDR — IP-адрес вашего сайта.
  • SERVER_PORT — Порт, на котором работает Apache.
  • SERVER_PROTOCOL — Версия HTTP протокола.
  • SERVER_SOFTWARE — Название сервера, например, Apache/1.3.2 (Unix)
  • TIME_YEAR, TIME_MON, TIME_DAY, TIME_HOUR, TIME_MIN, TIME_SEC, TIME_WDAY, TIME — Переменные, предназначенные для работы со временем в разных форматах.
  • API_VERSION — Это версия API модуля Apache (внутренний интерфейс между сервером и модулем) в текущей сборке сервера, что определено в include/ap_mmn.h.
  • THE_REQUEST — Полная строка HTTP-запроса, отправленная браузером серверу (т.е., «GET /index.html HTTP/1.1»). Она не включает какие-либо дополнительные заголовки отправляемые браузером.
  • REQUEST_URI — Ресурс, запрошенный в строке HTTP-запроса.
  • REQUEST_FILENAME — Полный путь в файловой системе сервера к файлу или скрипту, соответствующему этому запросу.
  • IS_SUBREQ — Будет содержать текст «true», если запрос выполняется в текущий момент как подзапрос, «false» в другом случае. Подзапросы могут быть сгенерированы модулями, которым нужно иметь дело с дополнительными файлами или URI для того, чтобы выполнить собственные задачи.

Условие — это шаблон условия, т.е. какое-либо регулярное выражение, применяемое к текущему экземпляру «Сравниваемая Строка», т.е. «Сравниваемая Строка» просматривается на поиск соответствия Условию.

Помните, что Условие — это perl-совместимое регулярное выражение с некоторыми дополнениями:

  • Вы можете предварять строку шаблона префиксом ‘!’ для указания несоответствия шаблону;
  • ‘ <Условие’ (лексически меньше);
  • ‘>Условие’ (лексически больше);
  • ‘=Условие’ (лексически равно);
  • ‘-d’ (является ли каталогом);
  • ‘-f’ (является ли обычным файлом);
  • ‘-s’ (является ли обычным файлом с ненулевым размером);
  • ‘-l’ (является ли символической ссылкой);
  • ‘-F’ (проверка существования файла через подзапрос);
  • ‘-U’ (проверка существования URL через подзапрос).

Все эти проверки также могут быть предварены префиксом восклицательный знак (‘!’) для инвертирования их значения.

RewriteEngine включает или выключает работу механизма преобразования. Если она установлена в положение off, этот модуль совсем не работает. Заметьте, что по умолчанию настройки преобразований не наследуются. Это означает, что вы должны иметь RewriteEngine on директиву для каждого виртуального хоста, в котором вы хотите использовать этот модуль.
Синтаксис RewriteEngine выглядит следующим образом:

RewriteEngine on | off

# По умолчанию RewriteEngine off

Используйте для комбинирования условий в правилах OR вместо AND. Типичный пример — перенаправление запросов на поддомены в отдельные каталоги.

RewriteEngine on

RewriteCond %{REMOTE_HOST} ^mysubdomain1.* [OR]
RewriteCond %{REMOTE_HOST} ^mysubdomain2.* [OR]
RewriteCond %{REMOTE_HOST} ^mysubdomain3.*
RewriteRule ^(.*)$ ^mysubdomain_public_html/$1

RewriteCond %{REMOTE_HOST} ^mysubdomain4.*
RewriteRule ^(.*)$ ^mysubdomain4_public_html/$1

Для выдачи главной страницы какого-либо сайта, согласно «User-Agent:» заголовку запроса, Вы можете использовать следующие директивы:

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^$ /homepage.max.html [L]

RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule ^$ /homepage.min.html [L]

RewriteRule ^$ /homepage.std.html [L]

Для выдачи разных сайтов для разных браузеров, согласно «User-Agent:» заголовку запроса, Вы можете использовать следующие директивы:

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^(.*)$ /mozilla/$1 [L]

RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule ^(.*)$ /lynx/$1 [L]

RewriteRule ^(.*)$ /default/$1 [L]

Общий синтаксис директивы RewriteRule выглядит следующим образом:

RewriteRule Шаблон Подстановка [flag]

# flag - необязательное поле указывающее дополнительные опции

В подстановке вы можете использовать, в том числе, и специальные флаги путем добавления в качестве третьего аргумента директивы RewriteRule. Флаги — это разделённый запятыми следующий список флагов:

'redirect|R [=code]'
(вызывает редирект)

Префикс в Подстановке вида http://thishost[thisport]/ (создающий новый URL из какого-либо URI) запускает внешний редирект (перенаправление). Если нет никакого кода, в подстановке ответ будет со HTTP статусом 302 (ВРЕМЕННО ПЕРЕМЕЩЕН). Для остановки процесса преобразования вам также нужно написать флаг ‘L’.

'forbidden|F [=code]' 
(делает URL запрещенным)

Это делает текущий URL запрещённым, например, клиенту немедленно отправляется ответ с HTTP статусом 403 (ЗАПРЕЩЕНО). Используйте этот флаг в сочетании с соответствующими RewriteConds для блокирования URL по некоторым критериям.

'gone|G [=code]' 
(делает URL «мёртвым»)

Этот флаг делает текущий URL «мертвым», т.е., немедленно отправляется HTTP ответ со статусом 410 (GONE). Используйте этот флаг для маркировки «мертвыми» несуществующие более страницы.

'proxy|P [=code]' 
(вызвает прокси)

Этот флаг помечает подстановочную часть как внутренний запрос прокси и немедленно (т.е. процесс преобразования здесь останавливается) пропускает его через прокси-модуль. Используйте этот флаг для того, чтобы добиться более мощной реализации директивы ProxyPass, интегрирующей некоторое содержимое на удаленных серверах в пространство имён локального сервера.

'last|L [=code]' 
(последнее правило)

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

'next|N [=code]' 
(следуюший раунд)

Перезапустить процесс преобразований (начав с первого правила). В этом случае URL снова сопоставляется неким условиям, но не оригинальный URL, а URL вышедший из последнего правила преобразования. Используйте этот флаг для перезапуска процесса преобразований, т.е. безусловному переходу на начало цикла.

'chain|C [=code]' 
(связь со следующим правилом)

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

'type|T=MIME-тип [=code]'
(принудительно установить MIME тип)

Принудительно установить MIME-тип целевого файла в MIME-тип. К примеру, это можно использовать для имитации mod_alias директивы ScriptAlias, которая принудительно устанавливает для всех файлов внутри отображаемого каталога MIME тип равный «application/x-httpd-cgi».

'nosubreq|NS [=code]'
(используется только в случае не внутреннего подзапроса)

Этот флаг дает команду механизму преобразований пропустить директиву, если текущий подзапрос является внутренним подзапросом. К примеру, внутренние подзапросы в Apache происходят тогда, когда mod_include пытается получить информацию о возможных файлах по умолчанию для каталогов (index.xxx). При подзапросах это не всегда полезно и даже иногда вызывает проблему в работе набора директив преобразований. Используйте этот флаг для исключения некоторых правил.

'nocase|NC [=code]' 
(не учитывать регистр)

Это делает Шаблон нечувствительным к регистру, т.е. нет различий между ‘A-Z’ и ‘a-z’, когда Шаблон применяется к текущему URL.

'qsappend|QSA [=code]' 
(добавлять строку запроса)

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

'noescape|NE [=code]' 
(не экранировать URI при выводе)

Этот флаг не даёт mod_rewrite применять обычные правила экранирования URI к результату преобразования. Обычно, специальные символы (такие как ‘%’, ‘$’, ‘;’, и так далее) будут экранированы их шестнадцатиричными подстановками (‘%25’, ‘%24’, и ‘%3B’, соответственно); этот флаг не дает это делать.

Если в подкаталогах в .htaccess нет ни одной директивы модуля mod_rewrite, то все правила преобразования наследуются из родительского каталога.

При наличии в файле .htaccess каких-либо директив модуля mod_rewrite не наследуется ничего, а состояние по умолчанию выставляется таким же, как в главном конфигурационном файле веб-сервера (по умолчанию «off»). Поэтому, если нужны правила преобразования для конкретного каталога, то нужно еще раз вставить директиву «RewriteEngine on» в .htaccess для конкретного каталога.

При наследовании правил из верхних каталогов и добавлении к ним новых свойственных только данному каталогу — необходимо выставить в начале следующее: «RewriteEngine on» и «RewriteOptions inherit» — последняя директива сообщает серверу о продолжении.

Примеры использования mod_rewrite можно посмотреть тут.

Индексные страницы

Когда пользователь заходит на хост, например, http://gentoo.org, принято, что открывается индексный файл index.* , а при его отсутствии отображается либо содержимое каталога, либо отдается ошибка 403 FORBIDDEN (если отключена опция «просмотр директорий»).

За листинг файлов отвечает директива Indexes (показывать посетителю список файлов, если в выбранном каталоге нет файла index.html или его аналога).

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

# Запрет выдачи листинга пустого каталога
Options -Indexes

А чтобы выдавал листинг, нужно:

Если же понадобится разрешить просматривать список файлов, но чтобы при этом чаcть файлов определенного формата не отображалась, то запишем:

Выдает листинг каталога, т.е. его содержание со всем содержанием, за исключением файлов-скриптов PHP и Perl.

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

DirectoryIndex index.html index.shtml index.pl index.cgi index.php

Если же вы хотите что бы при обращении к каталогу открывался не index.html, а, например, файл htaccess.php или /cgi-bin/index.pl:

DirectoryIndex htaccess.php /cgi-bin/index.pl

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

В ходе работы сервера иногда возникают ошибки, однако правильнее называть их не сбоями в работе сервера, а стандартными кодами возврата, оговоренными в стандарте HTTP_RFC2616. Вообще, в RFC ошибки называются «Status Codes», но мы их будем называть именно ошибками — так привычнее.

Код возврата — это трехзначное число, на основании которого можно судить о том, насколько успешно был обработан запрос. Код возврата начинающиеся на 1,2,3 считаются успешными, остальные причисляются к разряду ошибок.

Вот список ошибок 4xx и 5xx:

  • 400 — Bad Request
  • 401 — Unauthorized
  • 402 — Payment Required
  • 403 — Forbidden
  • 404 — Not Found
  • 405 — Method Not Allowed
  • 406 — Not Acceptable
  • 407 — Proxy Authentication Required
  • 408 — Request Time-out
  • 409 — Conflict
  • 410 — Gone
  • 411 — Length Required
  • 412 — Precondition Failed
  • 413 — Request Entity Too Large
  • 414 — Request-URI Too Large
  • 415 — Unsupported Media Type
  • 500 — Internal Server Error
  • 501 — Not Implemented
  • 502 — Bad Gateway
  • 503 — Service Unavailable
  • 504 — Gateway Time-out
  • 505 — HTTP Version not supported

При возникновении ошибки 4xx или 5xx посетитель Вашего сайта увидит в браузере сообщение от сервера, которое вряд ли можно назвать предельно понятным рядовому пользователю. Apache предоставляет возможность выдать вместо аскетичного технического текста, не изобилиющего деталями, свою страницу, где Вы можете человеческим языком объяснить пользователю, что произошло и что делать.

Пример переопределения страниц ошибок приведен ниже:

# содержание файла .htaccess:

ErrorDocument 404 http://bg10.ru/error/404.htm
ErrorDocument 403 http://bg10.ru/error/403.htm
ErrorDocument 400 http://bg10.ru/error/400.htm
ErrorDocument 500 http://bg10.ru/error/500.htm

# в случае ошибки "FORBIDDEN" показывается текстовое сообщение, которое
# обязательно должно начинаться с кавычки, кавычка в сообщении не выводится:

ErrorDocument 403 "Sorry can't allow you access today, 403 Status Codes Apache"

Более подробно об обработке ошибок можно прочитать в документации по Apache на странице «Custom error responses».

Кодировка

Иногда браузер пользователя не может корректно определить тип кодировки выдаваемого документа. Для решения этой проблемы используемая кодировка указывается в настройках Web-сервера Apache и заголовке передаваемого документа. Причем для корректного распознания эти кодировки должны совпадать. На наших серверах по умолчанию используется кодировка UTF-8.

В HTML для указания кодировки используется тег:

Наиболее часто встречаются типы кодировки для русского языка передаваемые в заголовке документа:

  • Windows-1251 — Кириллица (Windows).
  • KOI8-r — Кириллица (КОИ8-Р).
  • cp866 — Кириллица (DOS).
  • Windows-1252 — Западная Европа (Windows).
  • Windows-1250 — Центральная Европа (Windows).
  • UTF-8 — двух байтовая кодировка.

Теперь рассмотрим указание кодировки по умолчанию через .htaccess. AddDefaultCharset задает дефолтную таблицу символов (кодировку) для всех выдаваемых страниц на веб-сервере Apache. Указываем кодировку на все файлы, в которой по умолчанию получает документы браузер:

AddDefaultCharset WINDOWS-1251

При загрузке файла на сервер возможна перекодировка. Указываем, что все получаемые файлы будут иметь кодировку windows-1251, для этого напишем:

CharsetSourceEnc WINDOWS-1251

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

Управление доступом

Очень часто возникает необходимость запретить доступ к определенным файлам или папкам для определенных групп пользователей. В Web-сервере Apache есть встроенные средства для решения данной проблемы.

Для запрета или разрешения доступа ко всем файлам и папкам в текущей и во всех вложенных директориях используется директива Order, синтаксис ее очень прост:

Order [Deny,Allow] | [Allow,Deny]

# По умолчанию Deny,Allow

В зависимости от того, в каком порядке указаны директивы, меняется логика работы сервера. В случае, если Deny,Allow, то запрещается доступ со всех IP кроме оговоренных, в случае, если Allow,Deny, разрешается доступ со всех IP кроме оговоренных. Далее должны идти секции описания для доступа и запрета. Ключевое слово all означает со всех IP.

Например, мы хотим запретить (блокировать) доступ с IP 81.222.144.12 и 81.222.144.20 и разрешить всем остальным. Нам необходимо добавить в .htaccess следующий код:

Order Allow,Deny
Allow from all
Deny from 81.222.144.12 81.222.144.20

Для обратной ситуации, когда мы хотим запретить доступ со всех IP кроме 81.222.144.12 и 81.222.144.20, нам необходимо добавить в .htaccess следующий код:

Order Deny,Allow
Deny from all
Allow from 81.222.144.12 81.222.144.20

Запрет или разрешение на доступ можно указывать не только на все файлы, но так же можно указывать на отдельный файл или группы файлов. Например, мы хотим запретить доступ всех пользователей, кроме IP 81.222.144.12, к файлу passwd.html, который расположен в текущей директории:

<Files "passwd.html">
  Order Deny,Allow
  Deny from all
  Allow from 81.222.144.12
</Files>

Так же можно запретить или разрешить доступ к определенной группе файлов. Например, к файлам с расширением «.key«:

<Files ".(key)$">
  Order Deny,Allow
  Deny from all
  Allow from 81.222.144.12
</Files>

Паролирование директорий

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

AuthName "Protected area, need authorization"
AuthType Basic
AuthUserFile /home/t/test/.authfile
require valid-user

Данный файл нужно положить в ту директорию, на которую мы хотим поставить пароль.

Директива AuthName выводит сообщение при запросе пароля, все сообщение необходимо писать в одну строчку, синтаксис директивы тривиален:

Директива AuthType выбирает тип аутентификации. Возможны следующие типы: Basic или Digest. Второй может не поддерживаться некоторыми браузерами, поэтому пользоваться им не рекомендуется.

AuthUserFile указывает имя файла с паролями для аутентификации пользователей (пароли в этом файле будут шифрованными). Путь к файлу с паролями задается относительно корня веб-сервера. Храните файл с паролями в папке, доступ к которой закрыт для пользователей. Желательно поместить этот файл вне иерархии вашего веб-сайта, например, рядом с каталогом public_html. Размещать его выше каталога сайта нецелесообразно. Это не увеличит безопасность, но потребует дополнительной настройки прав доступа в связи с изоляцией сайтов.

Если у Вас установлена операционная система семейства Windows, Вы можете подключится к серверу по SSH (инструкцию по подключению можно найти тут) и воспользоваться утилитой htpasswd.

Запустив htpasswd без параметров мы увидим:

beget@ginger ~ # htpasswd
   Usage:
   htpasswd [-cmdps] passwordfile username
   htpasswd -b[cmdps] passwordfile username password
   -c Create a new file.
 beget@ginger ~ #

Здесь не будут рассматриваться все параметры этой команды, но вы можете сами прочитать подробности, запустив htpasswd в unix shell, или ознакомившись с соответствующей страницей документации по Apache.

Итак, изначально у нас еще нет файла с паролями и нам нужно его создать:

beget@ginger ~ # htpasswd -c authfile test1
   New password:
   Re-type new password
   Adding password for user test1
 beget@ginger ~ #

После выполнения данной операции htpasswd создаст файл passwords, в котором окажется пользователь test1 и его пароль в зашифрованном виде:

beget@ginger ~ $ cat .authfile
   test1:zgco1KREjBY8M
beget@ginger ~ $

А теперь мы хотим добавить еще одного пользователя. Так как файл с паролями у нас уже есть, мы просто не будем использовать ключ ‘-c’:

beget@ginger ~ # htpasswd .authfile test2
   New password:
   Re-type new password:
   Adding password for user test2
beget@ginger ~ $ cat .authfile
   test1:zgco1KREjBY8M
   test2:eN3uA6t0kzV1c
beget@ginger ~ $

Вернемся к описанию директив паролирования директорий. Директива Require определяет пользователей, которые могут получить доступ:

Require USER_NAME | valid-user

Указывая valid-user, Вы разрешаете доступ всем пользователям, перечисленным в файле паролей.

Приведем пример для доступа определенных пользователей из файла с паролями .htpasswd:

AuthName "Protected area, need authorization"
AuthType Basic
AuthUserFile /home/t/test/.authfile
require Alexey Kondr Fenix

Также, как и с запретом доступа по IP, здесь можно использовать расширение <Files> . Ниже приведены два примера: установки пароля на один определенный файл и на группу файлов.

<Files "passwd.html">
  AuthName "Protected area, need authorization"
  AuthType Basic
  AuthUserFile /home/t/test/.authfile
  require valid-user
</Files>
<Files ".(key)$">
  AuthName "Protected area, need authorization"
  AuthType Basic
  AuthUserFile /home/t/test/.authfile
  require valid-user
</Files>

Следует помнить, что при таком ограничении доступа пароли передаются по каналам связи в открытом виде и при определенных обстоятельствах могут быть перехвачены злоумышленниками. Поэтому в целях безопасности рекомендуется организовывать доступ к закрытым областям веб-сайта через защищенное SSL-соединение.

Указание опций PHP

Директивы для конфигурирования PHP можно размещать не только в файле php.ini, но также и в конфигурационных файлах Apache для вашего сайта – .htaccess. Это позволяет проводить тонкую настройку php для разных директорий.

Для работы с PHP в конфигурационных файлах Apache доступны 4 директивы: php_value, php_flag, php_admin_value, php_admin_flag, которые отличаются значимостью, типом устанавливаемых значений и местом применения.

Директивы php_admin_value, php_admin_flag выставляются только в файле httpd.conf, так что нам они не интересны. По сути, данные директивы переопределяют значение остальных директив.

Директива php_flag служит для установки логических значений директив в php.ini, в то время как директива php_value служит для установки строковых и числовых значений директив php.ini, т.е. любых типов значений, за исключением логических.

Синтаксис директив очень прост:

php_flag  имя директивы on | off
php_value  имя директивы VALUE

Приведем перечень наиболее часто используемых директив:

  • mysql.default_host — Устанавливает имя хоста базы данных.
    Пример: php_value mysql.default_host localhost
  • mysql.default_user — Устанавливает имя пользователя базы данных.
    Пример: php_value mysql.default_user alexey
  • mysql.default_password — Устанавливает пароль пользователя базы данных.
    Пример: php_value mysql.default_password Hry5Gw2
  • display_errors — Разрешает вывод ошибок и предупреждений в браузер.
    Пример: php_flag display_errors 0
  • display_startup_errors — Включает отображение ошибок, возникающих при запуске PHP.
    Пример: php_flag display_startup_errors 0
  • error_reporting — Определяет типы (уровни важности) фиксируемых ошибок.
    Пример: php_value error_reporting 32767
  • auto_prepend_file — Определение файла, который будет выводится в начале каждого php-скрипта. Путь указывается от корня файловой системы сервера.
    Пример: php_value auto_prepend_file /www/server/prepend.php
  • auto_append_file — Определение файла, который будет выводится в конце каждого php-скрипта.
    Пример: php_value auto_append_file /www/server/append.php
  • sendmail_from — Устанавливает e-mail отправителя, который применяется при отправке почтовых сообщений с помощью PHP.
    Пример: php_value sendmail_from root@beget.com
  • user_agent — Устанавливает строку User-agent, которая используется PHP при обращении к удаленным серверам.
    Пример: php_value user_agent “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)”

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

php_flag  display_errors 1
php_flag  display_startup_errors 1
php_value  error_reporting 2047

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

Удачной работы! Если возникнут вопросы — напишите нам, пожалуйста, тикет из Панели управления аккаунта, раздел «Помощь и поддержка».

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

Что такое .htaccess? (Hypertext Access)

Это файл-конфигуратор на уровне каталога, который загружается сервером и дает возможность существенно изменить его поведение (перенаправления, включение/отключение определенных функций). Этот файл также позволяет защитить некоторые разделы сайта.

Из-за специфики названий тип файла htaccess не всегда заметен. Чтобы его увидеть, необходимо активировать “ dot files ” или “ .files ” в вашем программном обеспечении FTP/Cpanel. Если возникают сложности, можно создать и редактировать файл как .txt (просто изменить расширение и название во время загрузки).

htaccess настройка

Всегда делайте бэкап htaccess, когда собираетесь внести какие бы то ни было изменения. Если ошибетесь, сайт высветит ошибку 500 Internal Server Error, и для последнего изменения можно будет просто поместить символ # перед кодом в файле htaccess.

  1. Вы можете комментировать ссылки в htaccess с помощью # , количество символов не имеет значения; к примеру, ## или ### можно использовать для описательных комментариев, а один # — для активации/деактивации кода.
  2. Используйте блокнот для редактирования в Windows, это удобно.
  3. Всегда делайте бэкап.
  4. Htaccess применяется к каталогу, в котором находится, и, таким образом, ко всем каталогам уровнем ниже; это значит, что при перемещении в корневой каталог, он сможет управлять всем сайтом.
  5. Ошибки в htaccess провоцируют 500 Internal Server Error ( внутреннюю ошибку сервера), но без паники — восстановите резервную копию или откомментируйте последний код.

htaccess

Перезапись кода

Просто поместите этот код в файл htaccess в верхней части, чтобы включить перезапись.

## Rewrite Engine Code ##

Options +FollowSymLinks

RewriteEngine on

Управление ошибками

По умолчанию браузер показывает страницу 404, с помощью htaccess страницу можно изменить. Создание интересной страницы 404 — тема для отдельной статьи.

Вы можете создавать собственные страницы в любом формате PHP/HTML.

Они не обязательно должны быть в корневом каталоге, но обязательно на одном сервере.

Если поместите URL целиком, тогда статус 404 не появится, скорее всего будет 301 или 200 Error.

ErrorDocument 404 http://www.example.com/404.html

## Error Handling Codes ##

ErrorDocument 401 /401.html

ErrorDocument 403 /403.html

ErrorDocument 404 /404.html

ErrorDocument 400 /400.html

Можно использовать больше или меньше кодов. Полный список кодов ошибок по ссылке Wikipedia.

Временная блокировка индексации

К примеру, может понадобиться, чтобы некоторое время люди вначале попадали на промостраницу. (Вы можете использовать index.php и для других целей).

Это больше относится к сфере общей безопасности и юзабилити, чем к SEO .

Этот сниппет кода блокирует доступ пользователей к спискам файлов.

## Block Index Display ##

Options All -Indexes

Set Default Index File

В любом случае, это удобный код. Нужно только изменить файл; тип файла не обязательно должен быть в HTML.

## Set Default Index Files ##

DirectoryIndex newindex.html

Защита Htaccess

Ваш файл htaccess потенциально уязвим, поэтому обезопасьте его.

## Secure htaccess file ##

<Files .htaccess>

Order Allow,Deny

Deny from all

</Files>

Если у вас WordPress, такой код защитит файл wp-config.php.

## Secure wp-config.php ###

<Files wp-config.php>

Order Allow,Deny

Deny from all

</Files>

Защита локации паролем

С помощью htaccess вы можете защитить определенные сегменты сайта. Вот полезный инструмент для создания этих файлов http://www.tools.dynamicdrive.com/password/

Так, с помощью htaccess и похожего файла htpasswd вы можете блокировать общий доступ к любому файлу или папке на сайте.

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

MyUsername:MyPassword

Нужно загрузить файл htpasswd в соответствующее место на сервере с помощью любой программы для пересылки файлов, это должен быть каталог не для общего доступа (не помещайте в /www/ или /htdocs/ ). И еще нужно записать путь файла из корневого каталога, это может выглядеть так:

/private/script/.htpasswd “.

После загрузки в htaccess добавляется новый раздел.

AuthName “Restricted Area”

AuthType Basic

AuthUserFile /private/script/.htpasswd

<Files /downloads>

require valid-user

</Files>

Блокировка прямых ссылок (хотлинкинг)

htaccess экономит полосу пропускания, таким образом решается проблема известная как хотлинк ( включение в веб-страницу ресурсов чужого сервера) .

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

## Block Hotlinking ##

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]

RewriteCond %{HTTP_REFERER} !^$

RewriteRule .*.(jpe?g|gif|bmp|png)$ – [F]

Если только 1-2 специфических сайта (обычно социальные) приводят к данной проблеме, используйте код:

## Block Hotlinking ##

RewriteEngine On

RewriteCond %{HTTP_REFERER} ^http://(.+.)?myspace.com/ [NC,OR]

RewriteCond %{HTTP_REFERER} ^http://(.+.)?friendfeed.com/ [NC,OR]

RewriteCond %{HTTP_REFERER} ^http://(.+.)?livejournal.com/ [NC]

RewriteRule .*.(jpe?g|gif|bmp|png)$ – [F]

Это крайняя мера, которую стоит применять в случаях, когда имеются частые хотлинкеры .

«Сохранить как»

Если у вас блог или другой контентный сайт, определенные файлы будут провоцировать диалог “Save As” (сохранить как), вместо того, чтобы браузер их загружал. Этот код идеален для каталога ресурсов.

Целесообразнее выбрать определенный подкаталог для кода.

## Force a file to download with a “Save As” ##

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

Перенаправить всех, c сохранением IP

Этот способ удобен во время внеплановых работ по технической части.

## Redirect Everyone but Selected IP Address ##

ErrorDocument 403 http://www.myoldsite.com

Order deny,allow

Deny from all

Allow from 111.111.111.111

Понадобится изменить ваш собственный IP-адрес (скопировать линию для каждого IP сотрудников), и отключить это, когда все будет готово.

Выборочная блокировка IP

В случае масштабной спам-атаки, можно заблокировать IP-адреса, которые содержатся в логах. Достаточно добавить этот сниппет кода, чтобы закрыть доступ к сайту.

Также вы можете с помощью этого сайта сгенерировать код блокировки любых IP:

http://www.htaccesstools.com/block-ips/

## Block IP Address ##

order allow,deny

deny from 127.0.0.1

deny from 127.0.0.2

deny from 127.0.0.3

allow from all

Раздел 2: перенаправления и перепись

Htaccess позволяет переписать и изменить URL, заменить автоматически созданные ссылки.

Перенаправление с http:// на www

Это старая проблема — добиться, чтобы сайт индексировался и в http://mydomain.com, и в www.mydomain.com.

Иногда бывает так, что сайт индексируется дважды, что не совсем хорошо в плане SEO.

Данная часть кода превратит любой запрос для версии http в www.

## Redirect non-www to the www version ##

RewriteCond %{HTTP_HOST} ^example.com [NC]

RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

Измените example.com на своей домен.

Перенаправление файла индекса (Index File) в корневой каталог

Еще одна проблема двойной индексации: поисковики индексируют и

www.example.com/ и www.example.com/index.php.

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

## Redirect index to root ##

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /.*index.html HTTP/

RewriteRule ^(.*)index.html$ /$1 [R=301,L]

В этом коде нужно изменить и название файла индекса (в 99% случаев это просто индекс), и расширение (обычно html, htm or php).

Перенаправление всех страниц на SSL

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

Еще понадобится сертификат безопасности и настройки сервера.

RewriteBase /

RewriteCond %{REMOTE_HOST} !^111.11.11.11

RewriteCond %{REQUEST_URI} !^/downtime.html$

RewriteRule ^(.*)$ /downtime.html [R=302,L]

## Redirect all Pages to Secure ##

RewriteCond %{HTTPS} !on

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Стандартное перенаправление 301

Перенаправление 301 сообщает Google и браузерам, что запрашиваемая страница перемещена в другое место.

Такой способ подходит, когда вы хотите удалить страницы сайта, или изменить названия ссылок, — так наносится минимальный ущерб продвижению.

Это намного лучше в сравнении со страницей 404, так, по крайней мере, внешние ссылки будут попадать на рабочие страницы.

## Standard 301 Redirect for Permanent Changes ##

redirect 301 /old-page.html http://www.example.com/newpage.html

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

Для больших сайтов перенаправления целесообразнее группировать по дате — так проще. Помните, что можно добавить # и превратить линию в комментарий.

Стандартное перенаправление (301) — подкаталог

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

Есть два способа сделать это:

## Redirect for a Directory – Preserves Request ##

RedirectMatch 301 ^/old-folder(.*) http://www.example.com/$1

Первый — сохраняет запрашиваемый файл. Если кто-то запрашивает mysite.com/blog/example.html — последует перенаправление на mystie.com/example.html.

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

Лучше убедиться, что новые файлы присутствуют, в противном случае появится 404.

Второй способ перенаправления используется, когда вы удалили подкаталог и хотите проверить, что не растеряли всех пользователей или ссылки, которые идут на старый подкаталог, и перенаправить их на обновленную страницу.

## Redirect a Directory – Does not preserve Request ##

RedirectMatch 301 ^/old-folder(.*)$ http://www.example.com/new-page.php

Опять же, кастомизировать эти коды очень просто. Нужно лишь вписать старый каталог и новые локации . Если хотите перенаправить на новый подкаталог, просто измените окончание url, чтобы там был подкаталог, но проверьте, что вы оставили $1 в первом примере.

302

Разница между пренаправлениями 301 и 302 в том, как их фиксируют поисковые роботы. Google вряд ли обновит свой индекс для 302, но для 301 это очень даже вероятно. 302 стоит использовать только тогда, когда изменения временные и вы хотите, чтобы Google их игнорировал. Чтобы превратить перенаправление в 302, просто измените цифру в начале. Это работает применительно ко всем сниппетам кодов перенаправления, где используется 301.

## Standard 302 Redirect for Temporary Changes ##

redirect 302 /old-page.html http://www.example.com/newpage.html

Изменение типа запросов файлов

Иногда нужно изменить типы файлов, для лучшего сжатия изображений, или для специального дополнения с php; htaccess справится со всем этим.

Этот код перенаправит все запросы, поэтому проверьте, загружены ли все новые страницы, нет ли «бродячих» файлов старого типа.

## Code to make all HTML requests become PHP requests ##

RedirectMatch 301 (.*).html$ http://www.example.com$1.php

Для кастомизации вы можете заменить типы файлов, в данном случае html — старый тип, а php — новый.

Перенаправьте все подкаталоги, за исключением корневого каталога

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

## Redirect an Entire Domain – Preserve Request ##

RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]

## Redirect all Subfolders to New Domain but Keep Root Intact ##

RewriteRule ^([^/]+)/(.*)$ http://www.example.com/$1/$2/$3 [R=301,L]

Перенаправление всего домена

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

У вас должен быть Google Webmaster Tools, установленный на старом домене, затем вы сможете сообщать Google, что перемещаете домены.

Есть два способа: с сохранением запросов и без. Если у нового домена будет такой же сайт и столько же страниц и ресурсов, тогда лучше сохранить запросы. Другими словами, пользователь, запрашивающий /best-page.html на старом сайте, увидит best-page.html на новом.

Вы можете сделать полное перенаправление домена без сохранения запросов.

По сути, нужно отдельно перенаправить разделы веб-сайта на соответствующие разделы нового сайта, но есть более простой способ.

## Redirect an Entire Domain – No Preservation ##

Redirect 301 / http://www.newdomain.com

файл htaccess

Перепись динамического URL

Большинство динамических URL выглядят примерно так:

http://www.mysite.com/posts.php?category=widgets

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

Для оптимизации URL нужно убрать строку запросов и использовать ее для создания структурированного URL.

В первом случае сделаем URL, который заканчивается как статический файл, то есть превратим URL в http://www.mysite.com/posts-about-widgets.php

RewriteRule ^posts-about-([^/]+).php/?$ /posts.php?category=$1&foo=bar [L]

RewriteCond %{QUERY_STRING} category=([^/]+)

RewriteCond %{QUERY_STRING} !foo=bar

Задается маппинг старого URL на новом.

Здесь три линии; первая определяет место старого URL на новом, вторая — место 1-ой строки запросов, третья — точка остановки, чтобы избежать беспрерывного перенаправления.

Первая линия позволяет установить формат новой страницы, в нашем случае это http://www.mysite.com/posts-about-widgets.php.

Вы можете изменить первую часть URL.

В скобках в конце — поле значения строки запросов, которая сюда переносится. Так URL выглядит достаточно динамично, чтобы отображать отношения с базой данных.

В этом примере — посты из категории виджетов, поэтому нужны соответствующие ключевые слова в URL.

PHP — тип файла, который используется в данном случае, но это может быть html или htm.

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

Вторая линия содержит ссылку на переменную, понадобится изменить поле — добавить ваш URL, а все остальное оставить. По сути, этот код сообщает: «любое количество различных символов и цифр».

Теперь у нас новая страница, но, вероятнее всего, система все еще будет генерировать старые ( уродливые) URL, поэтому нужно перенаправить людей на новую страницу. Для этого понадобится правило переписи/замены Rewrite Rule , которое заменяет запросы для строки запросов в новом ярком URL:

RewriteRule ^posts.php$ /posts-about-%1.php? [L,R=301]

Относительно просто, не так ли? Нужно только поместить ваш старый URL в первую часть, ваш новый URL — во вторую часть. И вуа-ля! Динамическое перенаправление на новую страницу со старой переменной готово!

Совместим части кода. Мы заменили пример с текстом для вставки, чтобы запомнить части, к которым относится каждое утверждение (statement).

Возможно, вы захотите перейти к новому типу URL, возможно, вернуться обратно, к странице http://www.mysite.com/posts/widgets instead of that .php. Это также возможно, нужно лишь немного изменить код.

## Rewrite Dynamic URL to A Static Page ##

RewriteRule ^new-page-([^/]+).php/?$ /old.php?field=$1&foo=bar [L]

RewriteCond %{QUERY_STRING} field=([^/]+)

RewriteCond %{QUERY_STRING} !foo=bar

RewriteRule ^old.php$ /new-page-%1.php? [L,R=301]

## Rewrite Dynamic URL to A Static SubFodler ##

RewriteRule ^new-folder/([^/]+)/?$ /old.php?field=$1&foo=bar [L]

RewriteCond %{QUERY_STRING} field=([^/]+)

RewriteCond %{QUERY_STRING} !foo=bar

RewriteRule ^old.php$ /new-folder/%1/? [L,R=301]

Здесь все так, как и прежде, но в данном случае мы назвали первый подкаталог вручную и позволили полю стать вторым подкаталогом.

Раздел 3: скорость и тонкая настройка

Последний раздел этого руководства посвящен тонкой настройке, которая позволяет улучшить скорость и производительность сайта. Многие из этих сниппетов кода зависят от активности отдельных модулей или разрешений, это значит, что разные серверы и хосты могут вести себя по-разному.

GZIP compression

GZIP compression — серверная функция, которая уменьшает вес веб-страниц и скриптов прежде, чем они отправляются в браузер.

Прежде эта технология была довольно несовершенной, в особенности в безопасных разделах и платежных шлюзах. Сейчас все на порядок лучше. Большая часть браузеров (даже старых) принимает GZIP.

Есть несколько вариантов активировать GZIP. Не нужно изменять код — просто скопируйте и вставьте.

На этом сайте можно проверить, активирован ли GZIP на вашем ресурсе, и сколько времени/места сэкономлено.

http://www.gidnetwork.com/tools/gzip-test.php

Вот четыре способа, выберите один из них:

## Enable GZIP Version 1 ##

php_value output_handler ob_gzhandler

css_value output_handler ob_gzhandler

js_value output_handler ob_gzhandler

##ENABLE GZIP Version 2##

<Ifmodule mod_gzip.c>

mod_gzip_on Yes

mod_gzip_dechunk Yes

mod_gzip_item_include file .(html?|txt|css|js|php|pl)$

mod_gzip_item_include handler ^cgi-script$

mod_gzip_item_include mime ^text.*

mod_gzip_item_include mime ^application/x-javascript.*

mod_gzip_item_exclude mime ^image.*

mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*

</Ifmodule>

##Enable GZIP Version 3##

<Files *.php>

SetOutputFilter DEFLATE

</Files>

<Files *.js>

SetOutputFilter DEFLATE

</Files>

<Files *.css>

SetOutputFilter DEFLATE

</Files>

<Files *.html>

SetOutputFilter DEFLATE

</Files>

##Enable GZIP Version 4##

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript

BrowserMatch ^Mozilla/4 gzip-only-text/html

BrowserMatch ^Mozilla/4.0[678] no-gzip

BrowserMatch bMSIE !no-gzip !gzip-only-text/html

Активация кэширования

Кэширование позволяет постоянным посетителям не загружать повторно каждый элемент сайта. Если у вас WordPress, тогда можно взять несколько плагинов, например WP Hyper Cache.

Если у вас статический сайт, htaccess дает возможность применить кэширование. Стоит все перепроверить. Если у вас нестандартная CMS, или какой-либо динамический контент, ошибки с кэшированием могут привести к тому, что сайт перестанет обновляться. Поэтому стоит консультироваться с разработчиками.

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

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

## Enable Caching ##

## Files to Cache for One Month ##

<FilesMatch “.(flv|gif|jpg|jpeg|png|ico|swf)$”>

Header set Cache-Control “max-age=2592000”

</FilesMatch>

## Files to Cache for One Week ##

<FilesMatch “.(js|css|pdf|txt)$”>

Header set Cache-Control “max-age=604800”

</FilesMatch>

## Files to Cache for One Day ##

<FilesMatch “.(html|htm)$”>

Header set Cache-Control “max-age=43200”

</FilesMatch>

## Disable cache for script files ##

<FilesMatch “.(pl|php|cgi|spl|scgi|fcgi)$”>

Header unset Cache-Control

</FilesMatch>

GZIP и кэширование существенно улучшают производительность сайта.

Минимизация 404 за счет проверки грамматических ошибок

Check Spelling — это модуль сервера Linux Server Module. Check Spelling проверяет сервер на предмет наличия подобных URL.

К примеру, пользователь допускает ошибку, вписывая в браузер такой адрес:

http://www.mysite.com/caje/red.html

Но на самом деле он/она хотел написать:

http://www.mysite.com/cake/red.html

Check Spelling фиксирует такую незначительную ошибку и исправляет ее (если, конечно, не существует caje/red.html). Также учитывается состояние регистра строчных и прописных символов в URL.

##Make Linux correct case sensitive urls/slight typos in urls##

CheckSpelling On



Что это?
.htaccess – служебный файл, необходимый для работы с настройками сервера. Используя его, вы не копаетесь в настройках самого сервера, а вносите изменения в директории сайта.



Как работать?
Для работы с файлом на базовом уровне необходимо изучить его простой синтаксис и выучить несколько самых распространенных переменных. С опытом придет более глубокое понимание, и вы сможете решать куда более сложные задачи.

В статье рассказывается:

  1. Что такое .htacces
  2. Применение .htaccess
  3. Пошаговая инструкция создания файла .htaccess
  4. Синтаксис .htaccess
  5. Работа с .htaccess
  6. Пройди тест и узнай, какая сфера тебе подходит:
    айти, дизайн или маркетинг.

    Бесплатно от Geekbrains

Что такое .htacces

Служебный файл с таким именем хранит расширенные параметры работы с веб-серверами (Apache и т. п.). Он необходим для корректного функционирования любого сайта.

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

Тогда именно данный документ будет более приоритетным, нежели общий. Управлять всеми файлами, загруженными на сервер, можно с помощью файлового менеджера с FTP-клиентом (FileZilla, Total Commander и др.). Также подобную возможность предоставляют некоторые хостинг-провайдеры через встроенную панель управления.

Что такое .htacces

Что такое .htacces

Файл .htaccess позволяет обычному пользователю (не администратору) вносить изменения в настройки ресурса. Этой возможностью пользуются, например, SEO-оптимизаторы и программисты. Основной настроечный файл httpd.conf защищен правами доступа и доступен для редактирования лишь администратору сайта, так как производимые изменения напрямую влияют на жизнеспособность ресурса.

Документ .htaccess дополняет этот файл, снимая таким образом часть ограничений. Причем произведенные в этом документе изменения вступают в силу сразу после его загрузки на сервер. А в случае правки параметров httpd.conf сервер потребуется перезагрузить.

Перенаправления

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

Redirect 301 / http://site.com/ (всегда перенаправляет посетителя на site.com)

Redirect 302 / http://site.com/ (перенаправление на указанный сайт временное)

Блокировка доступа

С помощью настроек файла также блокируется доступ к ресурсу для указанного IP-адреса или диапазона адресов. Таким образом зачастую запрещаются любые запросы со стороны поисковых роботов.

deny from 146.0.71.199 (блокировка для IP-адреса 146.0.71.199)

Автоматическое подключение файлов

Благодаря использованию возможностей SSI (Server Side Include) и прописанным инструкциям в .htaccess html или php файлы будут подключены автоматически. При этом они добавляются в начало или конец документа исключительно по запросу пользователя, а в самом документе заранее не подключаются.

Скачать
файл

php_value auto_prepend_file «/mysite/functions.php» (подсоединение файла functions.php из каталога /mysite к началу документа)

php_value auto_append_file «/mysite/footer.html» (подсоединение файла footer.html из каталога /mysite к концу документа)

Настройка страниц с ошибками

На указанные в файле .htaccess страницы посетитель будет перенаправляться, если на сервере возникают определенные ошибки.

ErrorDocument 404 /notfound.html (перенаправление пользователя на notfound.html в случае появления ошибки 404)

ErrorDocument 500 /server.html (перенаправление пользователя на server.html в случае появления ошибки 500)

Кэширование

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

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

  • Исправление кодировки

Кодировка определяет формат печатных символов, которые видит пользователь и воспринимает как текст. Чаще всего используются UTF-8 и Windows-1251. Нечитаемые символы означают, что установлена неверная кодировка. Исправляется эта проблема с помощью файла .htaccess.

pdf иконка

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

doc иконка

Подборка 50+ ресурсов об IT-сфере

Только лучшие телеграм-каналы, каналы Youtube, подкасты, форумы и многое другое для того, чтобы узнавать новое про IT

pdf иконка

ТОП 50+ сервисов и приложений от Geekbrains

Безопасные и надежные программы для работы в наши дни

Уже скачали 20899 pdf иконка

  • Изменение главной страницы

По умолчанию главной назначается страница, содержащаяся в индексном файле. Именно ее видит пользователь в первую очередь, когда заходит на сайт. Для явного определения другой страницы в качестве главной используется файл .htaccess.

Изменение главной страницы

Изменение главной страницы
  • Создание семантического URL

Иногда слишком длинный и содержащий числа адрес требуется преобразовать в человекопонятный вид, так как иначе снижаются показатели поисковой оптимизации вследствие влияния URL на пользовательский фактор. Для этого в документ .htaccess добавляется одна команда, в которой текущему URL-адресу назначаются любые латинские символы.

  • Установка пароля на каталог

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

  • Настройка параметров PHP

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

  • Ограничение доступа к ресурсу

Как уже упоминалось, документ позволяет закрыть доступ к сайту с определенных IP-адресов. Благодаря этому обеспечивается защита от возможных хакерских атак. Например, сервер становится уязвимым при DdoS-атаках, когда процессор не в состоянии обработать огромное число запросов, поступающих с одного или нескольких IP.

  • Ограничение доступа для поисковых роботов

Поисковые боты индексируют сайты, собирая необходимую для этого информацию. В итоге индексируемые ресурсы появляются в поиске. Но существуют также нежелательные роботы (например, SolomonoBot). С помощью файла .htaccess сайт можно закрыть для определенных ботов, указанных по User-Agent.

Итак, перечисленный функционал дает пользователю возможность тонко настраивать сайты, не изменяя при этом общие параметры сервера. Оптимизаторам также можно давать доступ к единому конфигурационному файлу, через который они могут свободно менять настройки SEO.

Пошаговая инструкция создания файла .htaccess

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

Пошаговая инструкция создания файла .htaccess

Пошаговая инструкция создания файла .htaccess

Нужно иметь в виду, что панель управления cPanel по умолчанию скрывает все файлы с точкой спереди, включая .htaccess. Их отображение нужно включить, следуя инструкции.

Развитие искусственного интеллекта: история, современные тенденции

Читайте также

Если сайт создается вручную, этот файл, как и любой другой, можно создать самостоятельно на компьютере, а после загрузить на хостинг. В среде Windows это делается крайне просто:

  1. Нужно открыть любой простейший текстовый редактор (например, Блокнот).
  2. Далее пустой файл следует сохранить путем нажатия комбинации Ctrl + Shift + S или выбора пункта «Сохранить как…» в меню «Файл».
  3. В соответствующее поле вписывается имя .htaccess, файл сохраняется. Перед этим нужно включить отображение всех файлов в поле «Тип файла».

В конце имени может автоматически появиться стандартное расширение txt. Его нужно удалить, открыв Проводник и сняв галочку около пункта «Расширения имен файлов» во вкладке Вид.

Готовый .htaccess без расширения txt загружается на хостинг в корневой каталог сайта. В панели управления провайдера для этого нужно проделать следующее:

  1. В подразделе «www» раздела «Менеджер файлов» выбирается зарегистрированный домен.
  2. Открывается окно загрузки путем нажатия на кнопку «Загрузить», расположенную сверху на панели иконок.
  3. В окне выбирается недавно созданный файл и загружается нажатием на кнопку ОК.

Синтаксис .htaccess

Встроенный язык настроек весьма прост. Каждая команда должна занимать отдельную строку. Комментарии обозначаются спереди символом #. Они помогают другим разработчикам и SEO-оптимизаторам понять смысл той или иной директивы. Все, что находится правее «решетки», игнорируется сервером и не воспринимается как команда.

Только до 22.05

Скачай подборку тестов, чтобы определить свои самые конкурентные скиллы

Список документов:

Тест на определение компетенций

Чек-лист «Как избежать обмана при трудоустройстве»

Инструкция по выходу из выгорания

Чтобы получить файл, укажите e-mail:

Подтвердите, что вы не робот,
указав номер телефона:


Уже скачали 7503

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

Сам синтаксис директив построен на регулярных выражениях, использующих специальные символы и переменные. Полный их список представлен в официальной документации. Здесь же приведем базовые символы:

  • ^ — начало строки;
  • $ — конец строки;
  • . — любой символ, за исключением $;
  • — любое количество символов;
  • ? — один определенный символ;
  • [0-9] — любая цифра;
  • [a-z] — любая буква латиницы;
  • | — оператор «или» для выбора одной группы из двух;
  • () — оператор группировки символов.

Перечислим базовые переменные:

  • %{HTTP_USER_AGENT} — сведения об используемом браузере и операционной системе (передается значение из поля User-agent браузера);
  • %{REMOTE_ADDR} — IP-адрес пользователя;
  • %{REQUEST_URI} — запрашиваемый идентификатор URI;
  • %{QUERY_STRING} — параметры запроса после символа «?».

Работа с .htaccess

Выше мы описали операции создания файла и загрузки его на хостинг. Далее разберем, как сделать .htaccess работоспособным, используя перечисленные параметры конфигурирования.

Работа с .htaccess

Работа с .htaccess

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

  • DirectoryIndex index.php

Ключом здесь служит DirectoryIndex, а значением — index.php (страница, назначенная главной на конкретном сайте).

Добавить любую команду в конфигурационный файл очень просто. Для этого нужно:

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

В процессе редактирования нужно внимательно вставлять и исправлять команды. Некорректная их работа может привести к сбою функционирования всего сайта.

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

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

Во время технических работ сайт может работать нестабильно. С помощью директив .htaccess доступ к такому ресурсу или отдельным его составляющим на время можно ограничить.

  • Закрытие всего сайта осуществляется добавлением следующих строк:

Order Deny,Allow

Deny from all

  • Закрытие конкретной папки производится созданием отдельного файла внутри нее и добавлением в этот файл тех же строк.
  • Можно закрыть доступ для всех пользователей за исключением одного или нескольких указанных IP-адресов:

Order Deny,Allow

Deny from all

Allow from 123.123.123.123

В данном случае на пользователей с адресом 123.123.123.123 запрет не распространяется.

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

<Files example.exe>

Order Deny.Allow

Deny from all

</Files>

Здесь доступ закрывается конкретно для файла example.exe.

Ограничение для файлов определенного типа

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

Это делается добавлением конфигурации такого формата:

<Files «.(txt|pdf|jpg)$»>

Order Deny.Allow

Deny from all

</Files>

В показанном примере доступ запрещен для файлов с расширениями txt, pdf и jpg.

Запрет просмотра каталогов

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

Options -Indexes

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

Options +Indexes

Настройка в .htaccess переадресации с кодом 301

Чаще всего пользователи перенаправляются с одного домена на другой. Необходимость в этом возникает, например, при переезде сайта на другое доменное имя вследствие ребрендинга или иных причин. Выполняется переадресация также командами .htaccess. Редирект на https с http производится аналогичным образом.

В качестве примера приведем наиболее часто применяемую конструкцию. Итак, для редиректа страницы .htaccess должен содержать следующие строки:

RewriteEngine On

RewriteCond %{HTTP_HOST} site1.ru

RewriteRule (.*) http://site2.ru/$1 [R=301,L]

Здесь пользователь перенаправляется с исходного домена site1.ru на целевой site2.ru.

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

Страницы ошибок в .htaccess, а также коды этих ошибок указываются директивой ErrorDocument. Формат следующий:

ErrorDocument 404

http://site.ru/error/404.html

Первый язык программирования: разбираемся в особенностях

Читайте также

Здесь:

  • ru — доменное имя сайта;
  • error — каталог, содержащий страницу ошибки (при наличии таковой);
  • html — имя страницы ошибки.

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

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

Иногда пользователи сталкиваются с появлением ошибки 404 на сайте, если отсутствует файл .htaccess. WordPress, OpenCart и подобные движки, на основе которых разрабатывался ресурс, приводят именно к таким последствиям. При этом открываться может лишь главная страница, остальные же будут недоступны. Если подобная проблема возникает, прежде всего нужно убедиться в наличии конфигурационного файла, затем проверить корректность его названия.

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

Начнем издалека, чтобы и новичкам был понятен принцип работы описываемого в статье файла. Для функционирования сайта в Интернете нужен не только компьютер и выход к сети, но и установленное на него специальное ПО, которое обеспечивает доступ к данным по протоколам http и https. Таким программным обеспечением и является веб-сервер. Существуют различные типы веб-серверов, но самый распространенный — Apache. Он построен на открытом коде, предоставляется бесплатно, постоянно дорабатывается и улучшается, совместим с многими скриптами и работает почти на всех платформах, включая Windows, Linux, Netware 5.x.

Настраивается Apache через конфигурационные файлы, которые хранятся в текстовом формате. С их помощью можно задать определенные правила действия веб-сервера. Главный конфигурационный файл называется httpd.conf или apache.conf (в зависимости от дистрибутива ОС). Во многих случаях все конфигурации сервера можно указывать именно здесь, и в основном такой способ предпочтительней, потому что:

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

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

Содержание

  • 1 Что такое .htaccess и для чего он нужен
  • 2 Как создать файл .htaccess
  • 3 Синтаксис .htaccess
  • 4 Возможности .htaccess
    • 4.1 Контроль доступа
    • 4.2 Работа с ошибками веб-сервера
    • 4.3 301 редирект
    • 4.4 Модуль перенаправления mod rewrite
    • 4.5 Определение кодировки
    • 4.6 Другие возможности
  • 5 Если .htaccess не работает
  • 6 И еще несколько советов по работе с .htaccess
  • 7 Полезные ссылки

Что такое .htaccess и для чего он нужен

Файл (или файлы) .htaccess будет задавать правила работы веб-сервера только в каталоге, где он размещен, и его дочерних каталогах, без глобальных изменений работы всего сервера. Возможность использовать .htaccess прописывается директивой (т.е. командой) — AllowOverride — в главном конфигурационном файле httpd.conf, название которой прямо говорит о том, что настройки внутри .htaccess приоритетны перед настройками в httpd.conf (если иное не ограничено все той же директивой AllowOverride). С помощью этой директивы можно позволить все, а можно — только некоторые действия. Детальную инструкцию по его применению можно найти на сайте Apache.

С ней, при каждом обращении к веб-серверу, Apache будет просматривать все каталоги на наличие .htaccess. Изменения в файле действительны сразу после сохранения — перезагрузка всего веб-сервера не нужна (в отличие от изменений в httpd.conf).

Имя файла .htaccess — общепринятое, но вовсе не обязательное. В httpd.conf можно задать другое имя с помощью директивы AccessFileName, например, так:

AccessFileName .config

Как создать файл .htaccess

Как уже говорилось, конфигурационные файлы имеют текстовый формат, и создать .htaccess также можно с помощью текстового редактора (например, Блокнота или NotePad++ в Windows).

Имя файла — .htaccess (с точкой в начале);

тип — “Все файлы”;

формат переноса по словам;

режим ASCII (при загрузке .htaccess на хостинг по FTP-протоколу).

Apache — регистрозависимый веб-сервер, поэтому важно написать название маленькими буквами: .HTaccess и .htaccess — это разные файлы.

В Mac ОS файлы, начинающиеся с точки, невидимы. Поэтому Вы можете назвать его иначе и после, переместив по FTP на хостинг, переименовать. Обычно размещают файл в корневой директории веб-сервера (/public_html) либо в корневой директории сайта (/public_html/site.com/).

Синтаксис .htaccess

Синтаксис .htaccess аналогичен синтаксису httpd. Для каждой директивы предполагается отдельная строка. Для своего же удобства, Вы можете вносить в файл комментарии с помощью знака #, и значение после # будет игнорироваться веб-сервером. Этот трюк можно использовать для отключения любой директивы. Ее не нужно удалять полностью из файла — достаточно просто закомментировать.

Возможности конфигурационного файла огромны. Ниже приведены базовые настройки в .htaccess.

Возможности .htaccess

Контроль доступа

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

Order Deny,Allow
Deny from all

Запрет веб-доступа, кроме IP:

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

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

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

Запрет доступа к файлу:

<Files private.html >
Order allow,deny
Deny from all

Защита директории с помощью пароля:

AuthType Basic     
AuthName "Directory Name"
AuthUserFile /home/cpanel_user/.htpasswds/public_html/smth/passwd
require valid-user

# где AuthName "Directory Name - имя защищенной директории, а 
# /home/cpanel_user/.htpasswds/public_html/smth/passwd - местонахождение файла с паролем.

Работа с ошибками веб-сервера

Иногда вместо ожидаемой страницы посетитель может натолкнуться на ответ веб-сервера в виде ошибки с лаконичным, но не всегда понятным для простого пользователя, объяснением причины. Полный список кодов состояния можно найти в Википедии. Для самых распространенных (например, 404 или 500 ошибки) желательно создать свою страницу, которая лучше смотрится и представляет посетителю пути выхода. Задается она следующим образом:

ErrorDocument 404 http://yourdomain.com/error/404.html
# где http://yourdomain.com/error/404.html - путь к созданной странице.  

P.S. Пользователи услуги хостинг сайта от UNLim24.com могут воспользоваться для создания своей страницы функционалом контрольной панели ISPmanager (в разделе “WWW-домены” кнопка “Ошибки”).

301 редирект

Для создания постоянного перенаправления используется директива 301 редиректа, которая передает весь вес страницы на новый url (поэтому оно предпочтительней, чем 302 редирект — в целях SEO).

Перенаправление всего сайта на новый домен:

Redirect 301 / http://www.newdomain.com/

Перенаправление страницы на новую:

Redirect 301 /page1.html http://mydomain.com/page2.html

Модуль перенаправления mod rewrite

Незаменимым механизмом для изменения URL-ссылок “на лету” является модуль mod_rewrite. Его полезность, а вместе с тем, сложность заключается в том, что можно использовать несметное количество правил, включающих еще больше переменных.

Для работы модуля, прежде всего нужны директивы

RewriteEngine On (включает работу механизма преобразования)

Options FollowSymLinks (условие для работы mod_rewrite).

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

Для дальнейшего ознакомления с модулем рекомендуем обратиться к первоисточнику.

RewriteRule

Одной из самых функциональных директив модуля mod_rewrite является RewriteRule. Для того, чтобы указать условие, при котором будет работать правило, используется директива RewriteCond. Она (одна или несколько) обязательно прописывается перед RewriteRule.

Перенаправление страницы на новый домен:

RewriteRule ^page1.html$ http://newdomain.com/ [R=301]

Перенаправление сайта с домена без www на домен с www:

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]

Перенаправление по протоколу https:

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

Определение кодировки

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

AddDefaultCharset UTF-8

Такое изменение распространяется в пределах действия .htaccess и на все страницы сайта. Можно задать кодировку для определенного типа файла, например windows-1251 для html:

AddType "application/x-httpd-php3; charset=windows-1251" .html

Часто сама страница несет в себе (а именно в заголовке) информацию об используемой кодировке. Нужно проверить, чтобы указанная кодировка в документе и в конфигурационном файле совпадали. Приведенная здесь utf-8 практически всегда требуется при работе популярных cms, так как они рассчитаны на большой круг пользователей по всему миру. Кстати, по умолчанию эта же кодировка настроена и на наших серверах виртуального хостинга.

Другие возможности

— Определить индексный файл сайта:

По умолчанию, индексной страницей считается index.html. С помощью следующей директивы можно задать другое название файла, который отрывается первым при обращении к каталогу:

DirectoryIndex index.php

— Полезной директивой является FilesMatch, которая оговаривает пределы действия правила по названию файла, используя регулярные выражения. С ее помощью, например, можно запретить доступ к определенным файлам:

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

Есть некоторые директивы, которые не поддерживаются на наших серверах с виртуальным хостингом, но вы можете их разрешить на своем ВПС, например.

Причина в том, что работающий как suPHP веб-сервер не поддерживает php_flag и php_value. Поэтому, мы предлагаем использовать сPanel (крайне полезен подраздел “Выбор версии РНР”, для работы с error_log — “Журнал ошибок”) или создать локальный файл php.ini для этой цели. Пару директив мы все-таки привели ниже:

— Для того, чтобы избежать зависания веб-сервера при обработке некорректно написанных скриптов, существуетmax_execution_time. С ее помощью указывается время в секундах, отведенное на обработку РНР-скрипта. Можно увеличить время ожидания веб-сервера при выполнении скрипта:

php_value max_execution_time 60

— Определить максимальный размер загружаемого файла:

php_value upload_max_filesize 128M  (здесь вместо 128 поставьте нужное значение).

— Вывести ошибки РНР в отдельный файл:

php_flag  log_errors on
php_value error_log  /home/path/to/public_html/domain/PHP_errors.log
# PHP_errors.log - название файла, а 
# /home/path/to/public_html/domain - путь к нему).

P.S. На виртуальном хостинге трудно с точностью определить, какие директивы будут работать в .htaccess, потому что многие из тех, которые ведут к изменению конфигурации веб-сервера, запрещены по понятным причинам — эти изменения затронут всех пользователей на носителе.

Если .htaccess не работает

Проверить работу файла можно, прописав несложные директивы, которые при правильном синтаксисе и верных настройках httpd (как описывалось в начале статьи) должны сработать:

— например, запретив доступ к сайту извне с помощью директивы

Order deny,allow
Deny from all

— или записав в файл набор бессмысленных символов, которые не являются директивами. Если веб-сервер взаимодействует с htaccess, то он, конечно, не сможет их прочитать и отдаст 500 ошибку.

Если проблема действительно существует, нужно в первую очередь искать причину в главном конфигурационном файле:

— убедиться, что сервер разрешает использование файла .htaccess: есть запись AllowOverride All (и она не закомментирована с помощью #);

— проверить, что создана запись VirtualHost для домена. В качестве примера:

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example.com
# Другие директивы
</VirtualHost>

— название файла дополнительной конфигурации указано как Вам нужно. Если это .htaccess, то:

AccessFileName .htaccess

— присутствует хостнейм сервера (указывается при создании URL-перенаправлений) в виде IP-адреса сервера или домена:

ServerName www.example.com

Если же причина не в httpd, нужно проверить сам .htaccess на наличие синтаксических ошибок. Можно воспользоваться онлайн-сервисами (например, http://www.htaccesscheck.com/, http://htaccess.madewithlove.be/), или — оригинальным источником, где есть полный перечень директив, вместе с синтаксисом.

И еще несколько советов по работе с .htaccess

Крайне желательно перед любым редактированием делать резервную копию файла — чтобы при худшем исходе можно было “откатить” изменения обратно.

Рекомендуем вносить изменения пошагово, используя минимум директив — и в случае неудачи будет легче вычислить, какое именно правило вызвало ошибку.

Хотя изменения и сразу вступают в силу, кэш браузера никто не отменял — для проверки работы сайта после редактирования .htaccess, регулярно пользуйтесь его очисткой или загружайте страницу в обход кэша — через комбинацию клавиш Ctrl + F5 (в Safari: Ctrl + R, в Mac OS: Cmd + R).

Самая распространенная ошибка веб-сервера при работе с .htaccess — 500, и либо она указывает на проблему в синтаксисе (опечатка в директиве, например), либо же в главном конфигурационном файле не разрешен такой тип директивы.

Полезные ссылки

Лучший источник вдохновения для работы с .htaccess:

http://httpd.apache.org/docs/2.2/howto/htaccess.html

Многие инструкции по работе с .htacess, на русском:

http://htaccess.net.ru/

Простые генераторы директив для .htaccess:

http://htaccess.ru/generator/

http://www.htaccesseditor.com/en.shtml

Понравилась статья? Поделить с друзьями:
  • Швейная машина janome juno 513 инструкция по применению
  • Флавамед инструкция по применению цена сироп
  • Полиоксидоний инструкция ампулы по применению для детей
  • Коломенский машиностроительный завод руководство
  • Номидекс противовирусный для детей инструкция по применению