Pergunta

Também deve funcionar após a reescrita do URL.

É possível? Caso contrário, só posso codificar tudo.

Foi útil?

Solução

Se você estiver tentando criar um sistema de login com redirecionamento, precisará usar o cabeçalho HTTP_Referer para descobrir de onde o usuário veio para que você possa enviá -lo de volta para lá. A melhor maneira de fazer isso é que, no seu formulário de login, use algo assim:

//- 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>

Observe que alguns ISPs, navegadores ou proxies retirarão o cabeçalho do referente, para que você não possa confiar nele para funcionar perfeitamente para todos os usuários. Se você usar uma instrução IF para verificar se o cabeçalho existe ou não, poderá enviar esses usuários de volta à página inicial ou qualquer outra coisa.

EDITAR

Se você deseja usar $ _server ['request_uri'], ele deve ser definido como o URL bonito após uma reescrita se você estiver executando o Apache. Se você está executando o IIS, nesse caso, você precisa verificar $ _server ['x_http_original_url']. Algo assim:

<?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);
?>

e

//- 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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top