Назад | Перейти на главную страницу

Проблема перенаправления Nginx

Моя настройка Nginx в настоящее время имеет это:

 location / {
       if (!-e $request_filename){
            rewrite ^/(.*)$ https://domain.com/index.php?id=$1 redirect;
       }
 }

В основном для несуществующих страниц (404) он перенаправляет пользователя на домашнюю страницу. Но теперь у меня есть блог на WordPress по адресу https://domain.com/blog/, но любые элементы WordPress, например. https://domain.com/blog/test также были перенаправлены на домашнюю страницу. Интересно, как это исправить?

Если ваш блог находится на http://yourblog.com/blog, то вам нужно установить директиву для этого пути, если вы ранее не указали это как свой root каталог (например, root /var/www/html/blog).

Вам также следует НЕ использовать if заявления. Это распространенная ошибка NGiNX.. Использовать try_files вместо.

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

Если вам не нужны подкаталоги /blog для перенаправления вы можете ограничить перенаправление только этим конкретным каталогом, используя = в директиве расположения.

Например.

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

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

Например.

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

Более подробную информацию о директиве местоположения можно найти ВОТ.

На основании вопроса / ответа Вот и документация для location Вот:

нет синтаксиса для НЕ соответствия регулярному выражению. Вместо этого сопоставьте целевое регулярное выражение и назначьте пустой блок, а затем используйте location /, чтобы сопоставить что-либо еще.

Я бы сказал, что вам нужна директива местоположения, которая соответствует /blog/ и с пустым блоком, чтобы предотвратить перенаправление, что-то вроде

location /blog {
}