Как реализовать returnurl как SO в PHP?

Он также должен работать после перезаписи URL.

Это возможно? В противном случае я могу только жестко кодировать все.

Если вы пытаетесь создать систему входа в систему с перенаправлением, вам нужно использовать заголовок HTTP_REFERER, чтобы узнать, откуда пришел пользователь, чтобы вы могли отправить его туда. Лучший способ сделать это – в форме входа в систему использовать что-то вроде этого:

//- Login.php <?php if ($_POST['username'] && $_POST['password']) { //- Run username and password verifying script header("Location: ".$_POST['returnurl']); } $RedirectURL = $_SERVER['HTTP_REFERER']; ?> <form action="/login.php" method="post"> <input type="text" name="username" /> <input type="password" name="password" /> <input type="hidden" name="returnurl" value="<?php echo $RedirectURL; ?>" /> </form> 

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

РЕДАКТИРОВАТЬ

Если вы хотите использовать $ _SERVER ['REQUEST_URI'], он должен быть настроен на симпатичный URL-адрес после перезаписи, если вы используете Apache. Если вы используете IIS, в этом случае вам нужно проверить $ _SERVER ['X_HTTP_ORIGINAL_URL']. Что-то вроде этого:

 <?php if (!isset($_SERVER['X_HTTP_ORIGINAL_URL'])) $ReturnURL = $_SERVER['X_HTTP_ORIGINAL_URL']; else $ReturnURL = $_SERVER['REQUEST_URI']; header("Location: /login.php?returnurl=".$ReturnURL); ?> 

а также

 //- Login.php <?php if ($_POST['username'] && $_POST['password']) { //- Run username and password verifying script header("Location: ".$_POST['returnurl']); } $RedirectURL = isset($_GET['returnurl'] ? $_GET['returnurl'] : "/index.php"; ?> <form action="/login.php" method="post"> <input type="text" name="username" /> <input type="password" name="password" /> <input type="hidden" name="returnurl" value="<?php echo $RedirectURL; ?>" /> </form>