Вопрос или проблема
Я только что установил WordPress на своем VPS, и пока это единственный элемент на моем сайте. Для целей SEO я считаю, что лучше перенаправить основной домен на папку блога.
Допустим, основной домен – это example.com
, а WordPress находится по адресу example.com/blog
.
Я хочу переписать www.example.com
и example.com
на example.com/blog
.
Я погуглил, нашел несколько скриптов и внес изменения в файл конфигурации nginx. Моя конфигурация выглядит так:
#301 перенаправление www на не-www
server {
server_name www.example.com;
location = / {
rewrite ^/(.*) http://example.com/$1 permanent;
}
}
#301 не-www на подкаталог
server {
server_name example.com;
location = / {
rewrite ^/(.*) http://example.com/blog$1 permanent;
}
}
Это работает в некоторой степени, успешно перенаправляя на example.com/blog
. Единственная проблема в том, что я получаю ошибку 404. Когда я только перенаправляю nginx с www
на example.com/blog
, я могу получить доступ к странице блога.
Я знаю, что что-то не так в скрипте перенаправления не-www на подкаталог, но не знаю, как это исправить. Есть предложения?
Попробуйте это:
#301 перенаправление www на не-www
server {
server_name www.example.com;
# перенаправить все запросы
rewrite ^(.*) http://example.com$1 permanent;
}
server {
server_name example.com;
# это соответствует только /, а не любым другим запрашиваемым файлам
location = / {
rewrite ^ http://example.com/blog/ permanent;
}
# остальная конфигурация идет сюда...
}
Ваш вопрос имеет две части.
-
Получение переписывания имени сервера.
-
Получение переписывания в указанную директорию.
Что касается первой части, ваше правило переписывания неправильно. Нет необходимости захватывать что-либо, просто передайте переменную $request_uri
, которая содержит запрос, как клиент отправляет его в Nginx.
server {
server_name www.example.com;
# перенаправить все запросы
rewrite ^ http://example.com$request_uri? permanent;
}
Для второй части используйте гораздо более простое переписывание, такое как это:
server {
server_name example.com;
# это соответствует только /, а не любым другим запрашиваемым файлам
location = / {
rewrite ^.+ /blog permanent;
}
# остальная конфигурация идет сюда...
}
Ответ или решение
Чтобы правильно настроить 301 редирект на подкаталог вашей установки WordPress с использованием Nginx, необходимо обратить внимание на корректность конфигурации сервера, чтобы избежать ошибок 404 и обеспечить правильную индексацию для SEO. Ваша цель – перенаправить запросы с основного домена на подкаталог, где установлен WordPress. Давайте рассмотрим корректную конфигурацию вашего Nginx.
Шаг 1: Редирект с www на не-www
Первым делом, вы хотите перенаправить все запросы с www.example.com
на example.com
. Для этого вам понадобится следующий блок конфигурации:
server {
server_name www.example.com;
# Перенаправляем все запросы на основной домен без www
return 301 http://example.com$request_uri;
}
Здесь используется директива return 301
, которая является более простой и эффективной, чем rewrite
. Для всех запросов будет возвращаться статус 301, что означает «Перемещено навсегда», и идет перенаправление на тот же URI, что и изначальный запрос, но с основным доменным именем.
Шаг 2: Редирект с основного домена на подкаталог с WordPress
Теперь, чтобы все запросы на example.com
перенаправлялись на example.com/blog
, вам понадобится следующий блок:
server {
server_name example.com;
# Для корня сайта перенаправляем на подкаталог
location = / {
return 301 http://example.com/blog;
}
# Можно добавить и другие настройки для обслуживания, если это необходимо
location /blog {
# Здесь можно описать настройки, специфичные для вашего блога
try_files $uri $uri/ /blog/index.php?$args;
}
}
Объяснение конфигурации
-
Первый блок (www на non-www): Простое и понятное перенаправление, которое использует директиву
return
. Это минимизирует сложность и риск возникновения ошибок. -
Второй блок (корень на подкаталог): Здесь мы контролируем, что происходит, когда запрашивается корень домена: мы используем
return 301
, чтобы осуществить редирект на новый URL, который включает/blog
. Это гарантирует, что пользователи, заходящие наexample.com
, будут перенаправлены непосредственно наexample.com/blog
, не получая ошибок 404. -
Обслуживание блога: В случае, если вашему блогу потребуются дополнительные правила для обработки запросов, вы можете добавить условия в блок
location /blog
, чтобы правильно обрабатывать стандартные URL запросы к вашему WordPress блогу.
Заключение
Такая конфигурация Nginx обеспечит эффективный редирект без ошибок 404, что крайне важно для SEO. Все запросы будут корректно перенаправляться, что улучшит индексацию вашего сайта поисковыми системами. Не забывайте проверять изменения сразу после внесения, перезапуская Nginx с помощью sudo systemctl restart nginx
, чтобы убедиться, что всё работает корректно.