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

Как выполнить перенаправление с кодом состояния 404 в Nginx

Мы переместили наш веб-сайт на новый домен, и наш отдел SEO хочет иметь некоторое перенаправление со старых URL-адресов на новые URL-адреса с кодом состояния 404. Я не знаю, возможно ли это, и хочу узнать мнение сообщества

Мой вопрос: я хочу попытаться настроить перенаправление с внутреннего URL-адреса на внешний URL-адрес с кодом состояния 404 в Nginx. Я пробовал с rewrite и return. Но похоже, что это невозможно.

У кого-нибудь есть идеи?

Ты не можешь. 404 - это не код статуса переадресации, это код статуса ошибки, поэтому веб-браузеры, которые его получают, будут рассматривать его как ошибку, а не как переадресацию. Если вы хотите сказать, что страницы больше нет, и отправить браузеру найти ее в другом месте, то для этого и нужен код 301.

404 может быть выполнено только внутри, но не может быть выполнено для внешнего URL. Вы можете только направить его, но не с помощью 404. 404 означает, что его нет или его нет.

Если оба сервера или URL-адреса принадлежат вам, вы можете перенаправить на страницу php с заголовком php 404 и мета-адресом обновления html, которая будет перенаправлять на новый URL-адрес. Но это неправильный способ перенаправления

Вы не можете контролировать код состояния HTTP внешней страницы.

Однако, если вы хотите достичь отображение содержимое внешней страницы со статусом 404 на вашем сайте, это вполне возможно. Ты можешь использовать proxy_pass.

Но это становится сложнее, если удаленное место излучает 200. Потребуются два места:

location = /foo {
    error_page 404 = @ext_404;
    return 404;
}

location @ext_404 {
    proxy_pass https://bar.example.com;
    rewrite .* /lorem-ipsum break;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host bar.example.com;
    proxy_set_header X-NginX-Proxy true;
    proxy_redirect off;
    proxy_connect_timeout 1;
    proxy_intercept_errors off;
    expires 30;
}

В результате, когда кто-то посещает https://your.example.com/foo, они действительно увидят содержимое https://bar.example.com/lorem-ipsum с кодом состояния 404.