Nginx не поддерживает правила переписывания HTACCESS, и разработчикам требуется конвертировать эти правила в директивы nginx переписать. Давайте узнаем, как сделать это обращение.

Преобразовать правила переписывания.

В нашем последнем уроке мы узнали как установить несколько версий PHP с Nginx на Ubuntu. Apache является одним из самых популярных веб -серверов, но в последнее время Nginx зарекомендовал себя как конкурент Apache. Но Nginx не поддерживает правила переписывания HTACCESS. Итак, в этой статье мы узнаем, как преобразовать правила переписывания HTACCESS в директивы nginx переписать. Давайте начнем!

Nginx переписывает правила

Правила перезаписывания изменяют часть или весь URL -адрес в запросе клиента, обычно для информирования клиентов о том, что ресурс, который они запрашивают, сейчас находится в другом месте, или для управления потоком обработки в Nginx. Например, для пересылки запросов на сервер приложений, когда контент должен быть сгенерирован динамически. Директива try_files часто используется для этой цели. Две директивы для nginx rewrite nginx - return и rewrite, а директива _try_files - это удобный способ направления запросов на серверы приложений. Директива о возврате является более простым из двух директив общего назначения. Вы прилагаете возврат в контекст сервера или местоположения. Например, вот очень простой пример, который перенаправляет клиентов на новое доменное имя, используя директиву return

server {
    listen 80;
    listen 443 ssl;
    server_name www.old-name.com;
    return 301 $scheme://www.new-name.com$request_uri;
}

Но что, если вам нужно провести сложные различия между URL -адресами, захватить элементы в исходном URL, или изменить или добавить элементы на пути? Вы можете использовать директиву rewrite в таких случаях. Вот образец правила переписывания nginx, в котором используется директива переписывания. Он соответствует URL -адресам, которые начинаются со строки /песен, а затем включает в себя /или каталог /или аудио /аудио /каталог. Он заменяет эти элементы на / mp3 / и добавляет соответствующее расширение файла, .mp3 или .ra. Переменные $ 1 и 2 доллара отражают элементы пути, которые не меняются. В качестве примера,/загрузка/cdn-west/media/file1 становится/download/cdn-west/mp3/file1.mp3. Если на имене файла есть расширение (например, .flv), выражение убирает его и заменяет .mp3.

server {
    # ...
    rewrite ^(/songs/.*)/media/(\w+)\.?.*$ $1/mp3/$2.mp3 last;
    rewrite ^(/songs/.*)/audio/(\w+)\.?.*$ $1/mp3/$2.ra  last;
    return  403;
    # ...
}

.htaccess Правила переписывания

Файл .htaccess управляет несколькими способами, которым можно получить доступ к веб -сайту, заблокирован и перенаправлен. Это происходит с использованием серии из одного или нескольких правил переписывания .htaccess. Эти переписывания выполняются модулем Apache Mod_rewrite. Mod_rewrite предоставляет способ изменения входящих запросов URL -адресов, динамически, на основе правил регулярного выражения. Это позволяет вам отображать любые URL -адреса на вашу внутреннюю структуру URL любым способом. Это также используется, чтобы сделать ваши внешние URL-адреса чистыми, а затем отобразить их на уродливые внутренние URL-адреса. Например, следующее .htaccess Правление переписывает Redricts UNRL без www на URL www.

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

Преобразовать правила переписывания.

Как мы показали в нашем примере выше для перенаправления URL без WWW на URL-адрес www, давайте преобразуем то же самое.

server {
    listen      80;
    server_name yourdomain.com;
    return      301 http://www.yourdomain.com$request_uri;
}
 
server {
    listen      80;
    server_name www.yourdomain.com;
    # ...
}

Итак, здесь мы создали два отдельных блока server, один для yourdomain.com, а другой для www.yourdomain.com. И в блоке server для yourdomain.com Мы используем директиву return для перенаправления URL без WWW на URL. То же самое перенаправление, которое мы выполнили с помощью директивы о возврате, также может быть сделано с помощью директивы переписывания, но не рекомендуется.

server {
    listen      80;
    server_name www.yourdomain.com yourdomain.com;
    if ($http_host = yourdomain.com) {
        rewrite (.*) http://www.yourdomain.com$1;
    }
    # ...
}

Для большей ясности давайте преобразуем правила htaccess wordpress в директиву nginx try_files. WordPress.org распределяет Основной файл по умолчанию . Htaccess файл со следующим. Правила переписывания HTACCESS, которые обеспечивают красивые постоянные ссылки:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Вот преобразованная директива nginx try_files

location / {
    try_files $uri $uri/ /index.php?$args;
}

Заключение

В этом уроке мы исследовали правила переписывания Apache .htaccess и то, как мы можем преобразовать эти правила переписывания .htaccess в директивы nginx переписать. Мы также исследовали различные директивы Nginx, которые можно использовать для переписывания URL -адресов. Мы также дали пример переписывания правил как для Nginx, так и для Apache. Надеюсь, учебник поможет вам.

Исследовать