Вопрос

Это также должно работать после перезаписи 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'] после перезаписи, если вы используете Apache, для него должен быть установлен красивый URL-адрес.Если вы используете 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top