سؤال

يجب أن تعمل أيضًا بعد إعادة كتابة عنوان 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top