Как мне сделать перенаправление с 404 в качестве кода статуса в Nginx [закрыто]

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

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

  • rewrite может возвращать только 301 или 302 в качестве кода состояния.
  • return не может выполнять перенаправление с 404.
  • Я пробовал с перезаписать последний и вернуть 404 . Но это не сработало, потому что я хочу перенаправить на внешний URL.

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

-1
задан 19 February 2020 в 11:55
3 ответа

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

2
ответ дан 26 February 2020 в 02:30

Вы не можете контролировать код состояния 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.

1
ответ дан 26 February 2020 в 02:30

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

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

1
ответ дан 26 February 2020 в 02:30

Теги

Похожие вопросы