Есть связка nginx + php-fpm. Конфиг nginx - немного видоизменённых конфиг yii (yiiframework.ru/doc/guide/ru/quickstart.apache-ngi...). По одному из адресов на стороне php делается редирект вида header( "Location: " . $url );, необходимо, чтобы редирект отдавал клиенту код 200 вместо 302. Как это возможно сделать?
Если бы всё было так просто! Такой способ пробовал, не помогает. Так же, как и header( "Location: " . $url, 200 ); В любом случае сервер на запрос выдаёт код 302 и редиректит на нужную страницу.
Если ты хочешь переделать поведение, что не верно, то необходимо разобраться что устанавливает такой код ответа. Можно попробовать устанавливать так же код таким образом:
<?php
header("HTTP/1.0 200 OK");
?>
Зачем делать редирект со статусом 200? Это вне стандарта, и не соответствует ожидаемому браузером поведению сервера.
Более правильно делать редирект через Javascript.
// similar behavior as an HTTP redirect
window.location.replace("stackoverflow.com");
// similar behavior as clicking on a link
window.location.href = "stackoverflow.com";
Спасибо, AlexMt, за попытки помочь! Понимаю, что не по стандарту. Вся возня с кодами вызвана тем, что по ссылкам переходят боты, которые ожидают код 200 и не могут выполнять js. Средствами php проблема не решается, я уже пробовал все предложенные здесь способы. Остаётся ещё надежда на то, что удастся настроить nginx должным образом.
Боты сторонних сервисов, никто не даст их переписать. Другую страницу боту отдавать тоже не получится, так как страницы расположены на других сайтах, т.е. с нашего редирект необходим.
Увы, алиас не подходит. Можно условно считать, что это сокращалка ссылок (на самом деле это не так, но принцип действия такой же). Т.е. php должен определённым образом разобрать url, найти адрес для редиректа, и отправить пользователя туда с кодом 200