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

Nginx перенаправляет все подпапки, кроме самой папки

У меня странное столкновение имен для установки Wordpress, и мне нужно написать пару правил Nginx, чтобы исправить это.

Раньше мои программные проекты были перечислены на странице Wordpress / проекты, со ссылками на подстраницы / projects / aprojectname, / проекты / другое имя, и т.д.

Недавно я купил тему с настраиваемым типом публикации для элементов портфолио. Это называется проект (обратите внимание на отсутствующий s).

В / проект, Я получаю доступ к стандартному списку Wordpress всех проект сообщения. Затем я могу получить доступ к сообщениям, используя / проект / aprojectname, / проект / другое имя, и т.д.

Все идет нормально. Проблема в том, что я хотел бы использовать структуру new / project, сохраняя все предыдущие ссылки на my / projects / something. Кроме того, я хотел бы сохранить только страницу / projects (без перенаправления).

Это то, чего я хотел бы добиться.

  1. URL / проект только следует перенаправить на / проекты, так что я могу показать страницу Wordpress вместо «уродливого» списка сообщений Wordpress.

  2. Следовательно, URL / проекты только не должны обрабатываться. Должна отобразиться соответствующая страница Wordpress.

  3. Тем не мение, все URL-адреса в форме / проекты / что-то следует перенаправить на / проект / что-то

Пока это мое правило nginx.

location ~ ^/projects/(.*) {
   return 301 http://$server_name/project/$1;
}

Это хорошо работает для 3 .: / projects / aprojectname -> / project / aprojectname.

На 2. не работает, т.к. переписывает / проектирует на / проект

Я понятия не имею, как реализовать 1., так как любая попытка повлияет на ранее написанное правило.

location ~ ^/projects/(.+) {
    rewrite ^ http://$server_name/project/$1 permanent;
}

. + Вместо. * Устраняет проблему, поскольку. + Соответствует 1 или более символам, а. * Соответствует 0 или более символам. Следовательно, папка / projects / не затрагивается правилом.

Для 1 должно работать следующее:

location = /project {
    rewrite ^ http://$server_name/projects permanent;
}

location = является директивой точного соответствия для nginx, поэтому она соответствует только в том случае, если URI точно соответствует /project.

Я также заменил директиву return 301 на rewrite -directive, так как это предпочтительный способ перезаписи.

  • Tero