У меня странное столкновение имен для установки Wordpress, и мне нужно написать пару правил Nginx, чтобы исправить это.
Раньше мои программные проекты были перечислены на странице Wordpress / проекты, со ссылками на подстраницы / projects / aprojectname, / проекты / другое имя, и т.д.
Недавно я купил тему с настраиваемым типом публикации для элементов портфолио. Это называется проект (обратите внимание на отсутствующий s).
В / проект, Я получаю доступ к стандартному списку Wordpress всех проект сообщения. Затем я могу получить доступ к сообщениям, используя / проект / aprojectname, / проект / другое имя, и т.д.
Все идет нормально. Проблема в том, что я хотел бы использовать структуру new / project, сохраняя все предыдущие ссылки на my / projects / something. Кроме того, я хотел бы сохранить только страницу / projects (без перенаправления).
Это то, чего я хотел бы добиться.
URL / проект только следует перенаправить на / проекты, так что я могу показать страницу Wordpress вместо «уродливого» списка сообщений Wordpress.
Следовательно, URL / проекты только не должны обрабатываться. Должна отобразиться соответствующая страница Wordpress.
Тем не мение, все 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, так как это предпочтительный способ перезаписи.