Включить htaccess httpd centos

Обновлено: 01.07.2024

В этом руководства вы установите веб-сервер Apache с виртуальными хостами на сервер на базе CentOS 7.

Предварительные требования

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

  • Пользователь без прав root с привилегиями sudo на сервере, настроенном согласно руководству по начальной настройке сервера на базе CentOS 7.
  • Базовый брандмауэр, настроенный согласно руководству Рекомендуемые дополнительные шаги для новых серверов на базе CentOS 7.

Шаг 1 — Установка Apache

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

После обновления пакетов установите пакет Apache:

После подтверждения установки yum выполнит установку Apache и всех требуемых зависимостей.

Затем перезагрузите брандмауэр, чтобы новые правила начали действовать:

После перезагрузки брандмауэра вы будете готовы запустить службу и проверить веб-сервер.

Шаг 2 — Проверка веб-сервера

Apache не запускается автоматически на CentOS после завершения установки. Вам нужно будет запустить процесс Apache вручную:

Убедитесь, что служба запущена с помощью следующей команды:

Если служба запущена, вы увидите значение active (активна) в статусе:

Как видно из результатов, служба успешно запущена. Однако лучше всего протестировать ее запуск посредством запроса страницы из Apache.

Откройте страницу Apache по умолчанию, чтобы подтвердить работу программного обеспечения через ваш IP-адрес: Если вы не знаете IP-адрес вашего сервера, есть несколько способов узнать его с помощью командной строки.

Введите следующие данные в командной строке сервера:

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

Когда вы узнаете IP-адрес вашего сервера, введите его в адресную строку браузера:

Вы увидите стандартную веб-страницу Apache в CentOS 7:

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

Шаг 3 — Управление процессом Apache

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

Чтобы остановить веб-сервер, введите:

Чтобы запустить остановленный веб-сервер, введите:

Чтобы остановить и снова запустить службу, введите:

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

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

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

Apache должен будет запуститься автоматически при следующей загрузке сервера.

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

Шаг 4 — Настройка виртуальных хостов (рекомендуется)

Создайте дополнительную директорию для хранения файлов журнала для сайта:

Затем назначьте права владения для директории html с помощью переменной среды $USER :

Убедитесь, что ваша корневая директория имеет набор разрешений по умолчанию:

Затем создайте в качестве примера страницу index.html , используя vi или свой любимый редактор:

Нажмите i для переключения в режим INSERT (ВСТАВКА) и добавьте в файл следующий пример HTML-контента:

Сохраните и закройте файл, нажмите ESC , введите :wq и нажмите ENTER .

Создав директорию сайта и пример файла index, вы уже почти готовы к созданию файлов виртуального хоста. Файлы виртуального хоста определяют конфигурацию отдельных сайтов и указывают веб-серверу Apache, как отвечать на различные запросы доменов.

Перед созданием ваших виртуальных хостов вам нужно будет создать директорию sites-available , чтобы хранить их в этой директории. Также вы должны будете создать директорию sites-enabled , которая указывает Apache, что виртуальный хост готов к обслуживанию посетителей. Директория sites-enabled будет хранить символьные ссылки на виртуальные хосты, которые мы хотим опубликовать. Создайте обе директории с помощью следующей команды:

Затем вы должны попросить Apache выполнить поиск виртуальных хостов в директории sites-enabled . Для этого необходимо изменить главный файл конфигурации Apache и добавить строку, объявляющую опциональную директорию для дополнительных файлов конфигурации:

Добавьте эту строку в конец файла:

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

Начните с создания нового файла в директории sites-available :

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

Сохраните файл и закройте его после завершения.

Теперь, когда вы создали файлы виртуального хоста, вы должны будете активировать их, чтобы Apache смог предоставлять их посетителям. Для этого нужно создать символьную ссылку для каждого виртуального хоста в директории sites-enabled :

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

Шаг 5 — Настройка разрешений SELinux для виртуальных хостов (рекомендуется)

SELinux настраивается для работы с конфигурацией Apache по умолчанию. Поскольку вы настроили пользовательскую директорию журналов в файле конфигурации виртуальных хостов, вы получите ошибку при попытке запуска службы Apache. Для устранения данной проблемы вам нужно обновить политики SELinux, чтобы разрешить Apache записывать данные в нужные файлы. SELinux обеспечивает повышенную безопасность для вашей среды CentOS 7, поэтому мы не рекомендуем полностью отключать модуль ядра.

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

Универсальное изменение политик Apache

Запустите следующую команду для установки универсальной политики Apache:

Изменение политик Apache для директории

Эта команда формирует список и выводит контекст SELinux из директории. Вы увидите примерно следующий результат:

Затем воспользуйтесь командой restorecon для применения этих изменений и их сохранения между перезагрузками:

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

Вы можете вывести список контекста еще раз, чтобы посмотреть изменения:

Результат отражает обновленный тип контекста:

Шаг 6 — Тестирование виртуального хоста (рекомендуется)

Вы увидите, что Apache удалось создать файлы errors.log и requests.log , которые указаны в конфигурации виртуального хоста:

Успешно! Виртуальный хост example.com работает!

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

Заключение

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

Если вы хотите развернуть более полный комплекс приложений, ознакомьтесь с этой статьей Настройка набора LAMP в CentOS 7.

Apache is a modular web server that allows you to customize its capabilities by enabling and disabling modules. This provides administrators the ability to tailor the functionality of Apache to meet the needs of their web application.

In this tutorial, we will install Apache on a CentOS 7 server, confirm that the mod_rewrite module is enabled, and explore some essential functions.

Prerequisite

Before following this tutorial, make sure you have a regular, non-root user with sudo privileges. You can learn more about how to set up a user with these privileges from our guide, How To Create a Sudo User on CentOS.

Step 1 – Installing Apache

We will install Apache using yum , the default package management utility for CentOS.

When prompted with Is this ok [y/d/N]: message, type Y and press the ENTER key to authorize the installation.

Next, start the Apache daemon, a standalone process that creates a pool of child processes or threads to handle requests, with the systemctl utility:

To make sure Apache successfully started, check its state with the status command:

With Apache up and running, let’s turn our attention to its modules.

Step 2 – Verifying mod_rewrite

If the rewrite_module does not appear in the output, enable it by editing the 00-base.conf file with the vi editor:

Once the text file opens type i to enter insert mode and then add or uncomment the highlighted line below:

Now press ESC to leave insert mode. Then, type :x then press the ENTER key to save and exit the file.

Next, apply the configuration change by restarting Apache:

With Apache installed and the mod_rewrite module enabled, we’re ready to configure the use of a .htaccess file.

Step 3 – Setting up a .htaccess File

A .htaccess file allows the defining of directives for Apache, including a RewriteRule , on a per domain basis without altering server configuration files. In Linux, files preceded with a dot ( . ) are treated as hidden.

Before using a .htaccess file, we need to update the AllowOverride setting to be able to overwrite Apache directives.

Locate the <Directory /var/www/html> section and change the AllowOverride directive from None to All :

Save and exit the file and then restart Apache to apply the change:

Next, create a .htaccess file in the default document root, /var/www/html , for Apache.

Add the following line to the top of the file to activate the RewriteEngine , which instructs Apache to process any rules that follow:

Save and exit the file.

You now have a .htaccess file that will let you define rules to manipulate URLs as needed. Before we get into writing actual rules, let’s take a moment to review the basic mod_rewrite syntax.

Step 4 – Exploring the RewriteRule Syntax

RewriteRule Pattern Substitution [Flags]

  • RewriteRule: specifies the RewriteRule directive
  • Pattern: a PCRE (Perl Compatible Regular Expression) that matches the desired string. You can learn more about regular expressions here.
  • Substitution: where should the matching requests be sent
  • [Flags]: optional parameters to modify the rule. For more information on the available flags and their meanings, see Apache’s documentation on Rewrite Flags.

The RewriteRule is the workhorse of the mod_rewrite directives, which is why we predominately focus on it in this tutorial.

Step 5 – Exploring the RewriteCond Syntax

RewriteCond TestString Condition [Flags]

  • RewriteCond: specifies the RewriteCond directive
  • TestString: a string to test against
  • Condition: a pattern to match
  • [Flags]: optional parameter to modify the condition.

The RewriteCond directive does not allow Apache to consider any rewrite rules that follow it unless the particular condition evaluates to true.

Step 6 – Setting up Files

We will set up a basic rewrite rule to allow users to visit an about.html page without typing the file extension ( .html ) in the address bar of a web browser. Start by creating an about.html file in the document root directory:

Copy the following HTML code into the file:

Save and exit the file.

In a web browser, navigate to the following address:

You should see a white page with About Us on it. If you remove the .html from the address bar and reload the page, you’ll receive a 404 Not Found error. Apache can only access components by their full filename, but we can alter that with a rewrite rule.

Step 7 – Setting up a RewriteRule

We would like visitors to the About Us page to access it without having to type .html . To accomplish this, we’ll create a rule.

Open the .htaccess file:

After the RewriteEngine On line, add the following:

Save and exit the file.

Let’s examine the rewrite rule:

^about$ serves as the pattern that gets matched from the URL, and what the user types into their browser.
Our example uses a couple metacharacters to ensure that the term only exists in a particular location in the URL:

  • ^ indicates the start of the URL, after server_domain_or_IP / is stripped away.
  • & means the end of the URL

about.html shows the path to the file that Apache serves when it encounters a matching pattern.

[NC] is a flag that instructs the rewrite rule to be case-insensitive so that a user can enter lower and upper case letters in the URL. For example, the following URLs point to the about.html file:

  • serverdomainor_IP /about
  • serverdomainor_IP /About
  • serverdomainor_IP /ABOUT

With a simple rewrite rule, we’ve added a dynamic aspect to how users can access the About Us page.

Common Patterns

Now that we have a basic understanding of rewrite rules, we will explore two additional examples in this section.

Example files can be set up, but this tutorial does not include creating them; just the rewrite rules themselves.

Example 1: Simplifying Query Strings with a RewriteRule

Web applications often make use of query strings, which are appended to a URL using the question mark character ( ? ) and delimited by the ampersand character ( & ). Apache ignores these two characters when matching rewrite rules. However, sometimes query strings may be required for passing data between pages. For example, the URL for a search result page written in PHP may look like this:

Instead, we would like our visitors to be able to use the following cleaner URL:

We can achieve these results in one of two ways — through a simple replacement or matching options.

Example 1A: Simple Replacement

We’ll create a rewrite rule that performs a simple replacement, simplifying a long query URL:

The rule maps shoes/women to results.php?item=shoes&type=women .

Example 1B: Matching Options

In some cases, we might want to generalize the query string to include different types of shoes. We can accomplish this by doing the following:

  • Specify a series of options using the vertical pipe | , the Boolean “OR” operator
  • Group the match using () , then reference the group using the $1 variable, with 1 for the first matched group

The rewrite rule now becomes:

The rule shown above matches a URL of shoes/ followed by a specified type. This will modify the original URL so that:

This matching option allows Apache to evaluate several patterns without having to create a separate rewrite rule for each one.

Example 1C: Matching Character Sets

However, we would also like to specify any item, not limit it to just /shoes . So, we will do the following:

  • Write a regular expression that matches all alphanumeric characters. The bracket expression [ ] matches any character inside of it, and the + matches any number of characters specified in the brackets
  • Group the match, and reference it with $2 as the second variable in the file

The above example will convert:

We successfully expanded the matching ability to include multiple aspects of a URL.

Example 1D: Passing Query Strings

If you were to attempt to access the above URL with our current settings, you would find that the query string page=2 gets lost. This is easily fixed using an additional QSA flag, which causes the query strings to be combined. Modifying the rewrite rule to match the following will achieve the desired behavior.

Example 2: Adding Conditions with Logic

Now we’re going to look at the use of the RewriteCond directive. If a rewrite condition evaluates to true, then Apache considers the RewriteRule that follows it.

Example 2A: Default Page

Previously, we saw Apache handle a request for an invalid URL by delivering a 404 Not Found page. However, instead of an error page, we would like all malformed URLs redirected back to the homepage. Using a condition, we can check if the requested file exists.

This will redirect something like /admin/ random_text to /admin/home .

Let’s dissect the above rule:

  • % checks the requested string
  • !-f the ! or not operator states that if the requested filename does not exist, then execute the following rewrite rule.
  • RewriteRule redirects the requests back to /admin/home

Defining the 404 ErrorDocument would follow best practices. To do that, we’ll create an ErrorDocument rule to point 404 errors to an error.html page:

Example 2B: IP Address Restriction

A RewriteCond can be used to allow access to a site by a specific IP address.

This example blocks traffic from everywhere except 198.51.100.24.

The entire rule states that if the IP address requesting resources is not 198.51.100.24, then do not allow access.

  • % is the address string
  • !^(198\.51\.100\.24)$ negates the IP address. The \ backslashes escape the . dot, because otherwise, they serve as metacharacters used to match any character.
  • The F flag forbids access, and the L flag indicates that this is the last rule to run, if executed.

If you’d rather block access from the specific address, use the following instead:

Though you can use other methods to block or allow traffic to your site, setting up the restriction in a .htaccess file is the easiest way to achieve these results.

Conclusion

In this tutorial, we used a .htaccess file to work with the RewriteRule and RewriteCond directives. There are many reasons to use rewrite rules and the following resources detail the capabilities of the mod_rewrite module:

The mod_rewrite module is a crucial component of the Apache web server, and you can do a lot with it. However, things do not always go according to plan and when that happens you might find yourself with a redirect loop or an ambiguous 500 forbidden error. For tips on debugging these kinds of situations, review this StackOverflow post.

If you want to perform this type of redirect with Nginx as your web server, you should follow this tutorial instead: How to Redirect www to non-www with Nginx on CentOS 7.

Prerequisites

This tutorial assumes that you have superuser privileges, i.e. sudo or root, on the server that is running Apache. If you don’t already have that set up, follow this tutorial: Initial Server Setup on CentOS 7.

You must be able to add records to the DNS that is managing your domain. If you do not already have a domain, you may purchase one from a domain registrar, and manage it with the registrar’s DNS or DigitalOcean’s DNS. In this tutorial, we will use the DigitalOcean DNS to create the necessary records.

Let’s get started by configuring your DNS records.

Configure DNS Records

Open whatever you use to manage your DNS. For our example, we’ll use the DigitalOcean DNS.

When you have created both records, it should look something like this:

Required A records

Note: This will also work with CNAME records, as long as the canonical name’s A record refers to the IP address of your Apache web server.

Now your server should be accessible via the www and non-www domain, but we still need to set up the redirect. We’ll do that now.

Enable Apache Rewrite Module

Enable .htaccess Files

We will configure Apache with redirect rules using .htaccess files. This is a feature that must be enabled by relaxing the DocumentRoot’s Directory permissions.

Assuming that you are using the default DocumentRoot, /var/www/html , find the configuration block that corresponds to it, <directory "/var/www/html> . Within the block, change AllowOverride None to AllowOverride All :

Now restart Apache to put the change into effect:

Now Apache is configured to read .htaccess files located anywhere under the /var/www/html directory. Let’s add our Rewrite rules now.

Configure Rewrite Module

As we mentioned earlier, we will configure the Rewrite module using an .htaccess file.

Change directories to your DocumentRoot, in our case, /var/www/html :

Now open .htaccess for editing:

Of course, if you haven’t created the file before, it will be blank. Depending on which direction you want to redirect, use one of the following options.

Option 1: Redirect www to non-www

If you want redirect users from www to a plain, non-www domain, insert this configuration:

Use this curl command to ensure that the non-www domain redirects to the www domain (replace the highlighted part with your actual domain):

You should get a 301 Moved Permanently response, that shows the non-www redirect location, like this:

Of course, you should access your domain in a web browser (www and non-www) to be sure.

Option 2: Redirect non-www to www

If you want redirect users from a plain, non-www domain to a www domain, insert this configuration:

Use this curl command to ensure that the non-www domain redirects to the www domain (replace the highlighted part with your actual domain):

You should get a 301 Moved Permanently response, that shows the www redirect location, like this:

Of course, you should access your domain in a web browser (www and non-www) to be sure.

Conclusion

That’s it! Your Apache redirect is now configured properly, and your users will be able to access your web server via your non-www and www domain.

If you would like to understand more about mod_rewrite, the Apache feature that we used to implement the redirect, feel free to read this tutorial: How To Set Up Mod_Rewrite.

Software Engineer @ DigitalOcean. Former Señor Technical Writer (I no longer update articles or respond to comments).

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

Данное руководство поможет установить Apache на сервер CentOS 7 и настроить поддержку mod_rewrite.

Требования

  • Сервер CentOS 7.
  • Пользователь с доступом к sudo (подробности можно найти в руководстве Создание пользователя sudo в CentOS).

1: Установка Apache

Apache можно установить с помощью пакетного менеджера yum.

Команда запросит подтверждения:

Чтобы продолжить установку, введите Y и нажмите Enter.

Запустите демон Apache (это автономный процесс, который создаёт пул дочерних процессов или потоков для обработки запросов):

Чтобы убедиться в том, что запуск Apache прошёл успешно, введите:

Сервер Apache успешно установлен. Теперь нужно сосредоточить внимание на модулях.

2: Модуль mod_rewrite

Если в списке нет модуля rewrite_module, включите его вручную. Отредактируйте 00-base.conf.

Когда текстовый редактор откроется, перейдите в режим вставки (нажмите i) и добавьте в файл:

Чтобы выйти из режима вставки, нажмите Esc. Нажмите :x и Enter, чтобы сохранить и закрыть файл.

Обновите настройки веб-сервера:

Теперь можно приступать к созданию файла .htaccess.

3: Создание файла .htaccess

Файл .htaccess определяет индивидуальные директивы Apache (включая RewriteRule) для каждого отдельного домена.

Примечание: В Linux с символа точки начинаются имена скрытых файлов.

Сначала нужно включить поддержку файлов .htaccess. Дляэтого отредактируйте директиву AllowOverride:

Найдите в этом файле раздел <Directory /var/www/html>. Он содержит AllowOverride. Измените значение None на All.

Сохраните и закройте файл. Перезапустите Apache:

Создайте файл .htaccess в стандартном каталоге document root (/var/www/html):

sudo vi /var/www/html/.htaccess

Добавьте в начало файла следующую строку, чтобы активировать RewriteEngine. Так Apache сможет обрабатывать правила перезаписи.

Теперь на сервере есть файл .htaccess, который позволяет установить правила перезаписи URL-ов. Прежде чем приступить к написанию этих правил, нужно ознакомиться с синтаксисом mod_rewrite.

4: Синтаксис RewriteRule

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

RewriteRule Pattern Substitution [Flags]

Директива RewriteRule очень важна для mod_rewrite.

5: Синтаксис RewriteCond

Директива RewriteCond позволяет добавлять условия в правило перезаписи. Условие перезаписи состоит из следующих компонентов:

RewriteCond TestString Condition [Flags]

  • RewriteCond: директива.
  • TestString: строка, которую нужно проверить.
  • Condition: шаблон, которому должна отвечать строка.
  • [Flags]: опциональные параметры.

Благодаря директиве RewriteCond Apache пвыполняет перезапись только в том случае, если определённое условие истинно.

6: Создание тестового файла

Создайте простое правило, которое позволит пользователям получать доступ к странице about.html без расширения (.html). Для начала создайте файл about.html в каталоге document root:

sudo vi /var/www/html/about.html

Скопируйте следующий код HTML и вставьте в файл:

Сохраните и закройте файл.

Откройте браузер и перейдите по ссылке:

7: Настройка RewriteRule

Теперь попробуйте сделать так, чтобы посетители страницы About Us могли получить к ней доступ без расширения .html в ссылке. Для этого нужно создать правило.

sudo vi /var/www/html/.htaccess

Найдите строку RewriteEngine On и добавьте после неё следующую строку:

RewriteRule ^about$ about.html [NC]

Сохраните и закройте файл.

Теперь в ссылке на страницу About Us не будет расширения:

Рассмотрим это правило подробнее:

Общие шаблоны

Итак, теперь вы знаете основы написания правил перезаписи. Рассмотрим два дополнительных примера.

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

Пример 1: Упрощение строки запросов с помощью RewriteRule

Приложения часто используют строки запросов. Эти строки находятся в URL-адресе, начиная с вопросительного знака (?) и заканчивая амперсандом (&). Обрабатывая правила перезаписи, Apache игнорирует эти два символа. К примеру, URL страницы результатов поиска, написанной на PHP, может выглядеть следующим образом:

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

Этого можно добиться двумя способами: с помощью простой замены или группирования параметров.

1: Простая замена

Создайте правило, выполняющее простую замену, чтобы ссылка стала чистой:

RewriteRule ^shoes/women$ results.php?item=shoes&type=women

Это правило вместо results.php?item=shoes&type=women будет использовать shoes/women.

2: Сопоставление и группирование

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

  • Задать набор параметров, разделив их с помощью символа вертикальной черты | (логический оператор OR).
  • Сгруппировать все заданные параметры с помощью круглых скобок (), а затем сослаться на группу с помощью переменной $1 (где 1 – номер группы параметров).

В результате получится такое правило:

RewriteRule ^shoes/(men|women|youth) results.php?item=shoes&type=$1

Это правило добавляет в URL новый сегмент.

3: Совпадение наборов символов

Чтобы пользователь мог открыть чистый URL любого раздела сайта (не только /shoes), нужно:

  • Написать регулярное выражение, совпадающее со всеми алфавитно-цифровыми символами. В квадратных скобках указывается поисковой шаблон (в данном случае он включает все символы), а символ + указывет что каждый символ в шаблоне может повторяться неограниченное количество раз.
  • Сгруппировать этот набор символов и присвоить ему $2.

RewriteRule ^([A-Za-z0-9]+)/(men|women|youth) results.php?item=$1&type=$2

Это правило преобразует:

4: Дополнительная строка запроса

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

RewriteRule ^([A-Za-z0-9]+)/(men|women|youth) results.php?item=$1&type=$2 [QSA]

Пример 2: Условия RewriteCond

Теперь рассмотрим подробнее директиву RewriteCond. Если условие перезаписи истинно, Apache обработает следующее за ним правило RewriteRule.

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

RewriteCond % !-f
RewriteRule ^admin/(.*)$ /admin/home

Теперь все ссылки на несуществующие страницы будут перенаправлены на /admin/home.

Рассмотрим вышеприведённое правило по частям:

  • % проверяет запрашиваемую строку.
  • !-f: оператор ! (not) указывает, что если запрашиваемого файла не существует, веб-сервер должен выполнить следующее правило переадресации.
  • RewriteRule перенаправляет запрос на /admin/home.

Также можно задать ErrorDocument, на который будут отправляться все запросы на несуществующие страницы. Создайте правило ErrorDocument и перенаправьте все ошибки 404 на страницу error.html:

ErrorDocument 404 /error.html

Теперь все запросы, которые получили ошибку 404, будут переадресованы на error.html.

2: Ограничение доступа по IP

RewriteCond позволяет ограничивать доступ к сайту по IP-адресу.

К примеру, это правило заблокирует весь трафик, кроме 198.51.100.24:

RewriteCond % !^(198\.51\.100\.24)$
RewriteRule (.*) - [F,L]

Если сайт будет запрашиваться другими IP-адресами, трафик будет заблокирован.

Вкратце рассмотрим это правило:

Чтобы заблокировать доступ к сайту для определенного IP, используйте такое правило:

RewriteCond % ^(198\.51\.100\.24)$
RewriteRule (.*) - [F,L]

Существует множество способов управления доступом к сайту, и файл .htaccess – один из самых простых.

Заключение

Модуль mod_rewrite – один из основных компонентов Apache.

В данном руководстве вы научились создавать файл .htaccess и работать с директивами RewriteRule и RewriteCond.

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