Чтобы дать указание браузеру запросить ту или иную страницу, необходимо отправить ему НТТР заголовок Location: с помощью функции header():
header("Location:" . $_SERVER['REQUEST_URI']);
exit;
Данный код выполнит перенаправление ровно на ту же самую страницу, на которой был вызван, поскольку в переменной $_SERVER['REQUEST_URI'] содержится полный адрес, который запрашивал браузер, обращаясь к этому скрипту. Если нужен адрес без строки запроса ("GET параметров"), то его можно получить так: strtok($_SERVER['REQUEST_URI'], '?');
Кроме того, надо не забывать завершать работу скрипта принудительно с помощью exit, поскольку сама по себе отправка заголовка не завершает работу кода, и он продолжает выполняться дальше.
Если "header не работает", то скорее всего либо просто ошибка в коде, либо это печально известная ошибка Headers already sent, которая объясняется тем, что что Location: - это НТТР заголовок, то есть перед ним не должно быть любого вывода, включая, разумеется, html теги.
Чтобы не было циклического перенаправления, надо заключать код в условие.
Например, самый распространенный вариант проверить отправку формы, это
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Обработка формы
header("Location:" . $_SERVER['REQUEST_URI']);
exit;
}
И в этом случае циклического перенаправления никогда не будет, поскольку перенаправление делается методом GET
header();работал, вам необходимо структурировать код таким образом, чтобы все echo/print/var_dump'ы и прочий вывод или html разметка шли строго послеheader(). – MoloF Nov 06 '19 at 22:18