Як зробити переспрямування в PHP?


1261

Чи можливо перенаправити користувача на іншу сторінку через використання PHP?

Скажіть, користувач переходить www.example.com/page.phpі я хочу переспрямувати їх www.example.com/index.php, як би це зробити без використання метаоновлення? Це можливо?

Це навіть може захистити мої сторінки від несанкціонованих користувачів.


Оновити заголовок можна в PHP: header
Zack Marrapese

11
@Sam: так само, як і бічний вузол, не реалізуйте будь-якого виду protection from unauthorized usersчерез переадресацію; це не так, як слід робити;)
Strae

7
@Strae Що не так із захистом сторінок перенаправленням? Тоді який найкращий спосіб?

6
Перенаправлення @PravindaAmarathunga є одним із елементів, але не єдиним. Просто переконайтеся, що захищені елементи взагалі не виводяться для несанкціонованих користувачів; Наприклад, перенаправлення браузера може бути відключено на стороні клієнта, наприклад: якщо браузер не переспрямовує, а вихідна сторінка виводиться як звичайна, що б побачив користувач? CMS зазвичай виконує переадресацію та не роздруковує захищені елементи, замінюючи звичайний висновок люб’язним повідомленням.
Strae

@PravindaAmarathunga перевір посилання з відповіді Маркуса
Strae

Відповіді:


1696

Підсумок існуючих відповідей плюс два мої центи:

1. Основна відповідь

Ви можете використовувати header()функцію для надсилання нового заголовка HTTP, але це потрібно надіслати в браузер перед будь-яким HTML або текстом (наприклад, перед <!DOCTYPE ...>декларацією, наприклад).

header('Location: '.$newURL);

2. Важливі деталі

die () або вихід ()

header("Location: http://example.com/myOtherPage.php");
die();

Для чого слід використовувати die()або exit(): Щоденний WTF

Абсолютна або відносна URL-адреса

З червня 2014 року можна використовувати як абсолютні, так і відносні URL-адреси. Див. RFC 7231, який замінив старий RFC 2616 , де дозволені лише абсолютні URL-адреси.

Коди статусу

Заголовок PHP "Місцезнаходження" все ще використовує код перенаправлення HTTP 302 , але це не той, який слід використовувати. Вам слід врахувати або 301 (постійне переадресація), або 303 (інше).

Примітка: W3C зазначає, що заголовок 303 несумісний з "багатьма користувачами, що передують HTTP / 1.1. Зараз використовувані браузери - це всі користувальницькі агенти HTTP / 1.1. Це не стосується багатьох інших агентів користувача, таких як павуки та роботи.

3. Документація

HTTP заголовки та header()функція в PHP

4. Альтернативи

Ви можете використовувати альтернативний метод, для http_redirect($url);якого потрібно встановити пакунок PECL пакета .

5. Функції помічника

Ця функція не містить код статусу 303:

function Redirect($url, $permanent = false)
{
    header('Location: ' . $url, true, $permanent ? 301 : 302);

    exit();
}

Redirect('http://example.com/', false);

Це більш гнучко:

function redirect($url, $statusCode = 303)
{
   header('Location: ' . $url, true, $statusCode);
   die();
}

6. Обхід

Як згадувалося, header()переадресації працюють лише до того, як щось буде виписано. Зазвичай вони виходять з ладу, якщо викликати внутрішній вихід HTML . Тоді ви можете використовувати вирішення HTML-заголовка (не дуже професійно!), Наприклад:

 <meta http-equiv="refresh" content="0;url=finalpage.html">

Або навіть переадресація JavaScript.

window.location.replace("http://example.com/");

5
Деякі проблеми з цією відповіддю: 303 може бути не "правильним" кодом статусу. 301, наприклад, може бути бажаним для Google. По-друге, він header('Location: '.$newURL);повинен бути до того, як будь-який HTML (або текст) буде переданий у браузер, інакше він не працює належним чином.
Чак Ле Бутт

6
На жаль, щоденна історія WTF - звичайна. У будь-якому випадку, це не проблема, яка відсутня, та причина поганої конструкції. Завершення процесу насильницьким способом є помилковим у 99,9% випадків. Поширене, більш чисте рішення (все одно не моє улюблене) - кинути RedirectionException і зафіксувати його на точці входу програми. Після цього ви можете мати усі свої "після *" дзвінки (журнали / тісні з'єднання / що коли-небудь)
robertodecurnex

4
http-equiv="Location"Чи не підтримується всіма браузерами. Ви повинні використовувати refreshзамість цього! <meta http-equiv="refresh" content="0;url=http://example.com/">
Timo002

71
Ніколи не видайте 301, якщо ви цього не маєте на увазі . 301 означає постійне, а постійне означає постійне , це означає , що воно буде кешоване агентами користувача, тобто довгі ночі, наповнені кофеїном, дивлячись на журнали додатків, цікаво, чи ти божевільний, бо ти клянешся, що якусь сторінку слід було б викликати або оновити, і ти клянешся Богу, це працює на вашій машині, але не на клієнті. Якщо ви обов'язково повинні зателефонувати на номер 301, поставте на ресурс кеш-макс. У вас немає безмежної мудрості, і ви не повинні діяти так, як ви.
madumlao

2
Але чи є причина використовувати штампи над виходом? вихід здається більш чистим і доцільним.
ars265

122

Використовуйте header()функцію для надсилання заголовка HTTPLocation :

header('Location: '.$newURL);

Всупереч тому, що думають деякі, die()не має нічого спільного з перенаправленням. Використовуйте його, лише якщо ви хочете переспрямувати замість звичайного виконання.

Файл example.php :

<?php
    header('Location: static.html');
    $fh = fopen('/tmp/track.txt', 'a');
    fwrite($fh, $_SERVER['REMOTE_ADDR'] . ' ' . date('c') . "\n");
    fclose($fh);
?>

Результат трьох страт:

bart@hal9k:~> cat /tmp/track.txt
127.0.0.1 2009-04-21T09:50:02+02:00
127.0.0.1 2009-04-21T09:50:05+02:00
127.0.0.1 2009-04-21T09:50:08+02:00

Відновлення - обов'язкове die()/ exit()є деякою міською легендою, яка не має нічого спільного з фактичним PHP. Це не має нічого спільного з тим, щоб клієнт "поважав" Location:заголовок. Надсилання заголовка не зупиняє виконання PHP, незалежно від клієнта, який використовується.


8
die () або exit () призначений для клієнтів, які не дотримуються заголовка "Location: ..."
clawr

12
@clawr: Ні, exit()це не дозволяє сторінки відображати вміст, що залишився (думаю, обмежені сторінки). vartec має рацію, він не має нічого спільного з заголовком HTTP Location, і вам цього не потрібно exit. Я вирішив включити його у свою відповідь, тому що для того, хто не знає, як зробити просту переспрямування, можна також грати в безпеку, а не реалізовувати простий, але вирішальний крок, просто щоб він міг скористатися передовим процесом контроль.
Алікс Аксель

1
Але браузери, які поважають заголовок, залишать сторінку та закриють з'єднання, поки ваш сценарій ще виконується. Це зовсім погано. PHP буде тривати з сценарієм деякий час (саме тому ваш код виконується), але може припинити його випадковим чином в середині виконання, залишаючи речі зламаними. Виклик ignore_user_abort () запобіжить це, але, щиро кажучи, цього не варто. Просто продовжуйте роботу з написанням HTML (хоча й, мабуть, марною), але не займайтеся тим, що пише на диску чи базі даних після заголовка ("Місцезнаходження:"); Запишіть на диск перед можливим перенаправленням. [Також: URL повинен бути абсолютним.]
FrancescoMM

чи є спосіб перенаправлення до того, як браузер виявить протокол HTTP? тому мені потрібно переадресувати, тому що я не можу отримати достатньо сертифікатів SSL для всіх моїх доменів. я б хотів .htaccessпереспрямувати, але мені потрібен спосіб якось передати той домен, який перенаправлений на кінцевий домен?
oldboy

109
function Redirect($url, $permanent = false)
{
    if (headers_sent() === false)
    {
        header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
    }

    exit();
}

Redirect('http://www.google.com/', false);

Не забудьте померти () / вийти ()!


6
І не забувайте буферизацію вихідних даних, інакше ви отримаєте "Заголовки вже відправлені"
Kuroki Kaze

8
... і не забудьте надрукувати щось, наприклад "ви перейдете на $ nepage за $ n секунд, натисніть $ посилання тут, якщо переадресація не відбудеться". Деякі веб-переглядачі та деякі налаштування браузера можуть не виконати переадресацію.
Strae

3
@DaNieL: цей тип переадресації не займе "$ n секунд". Це буде миттєво, якщо це взагалі трапиться, і будь-який відповідний браузер повинен впоратися з цим. Я думаю, ти думаєш про "мета-оновлення" переспрямувань, якими користуються люди, коли вони не знають нічого кращого.
rmeador

1
@rmeador ... Для старих браузерів та спеціальних браузерів. Спершу слід виконати заголовок Location, якщо у помилках є мета-переадресація зі знаком "Ви будете перенаправлені на сторінку через х секунд" із посиланням на випадок, якщо мета-переадресація не вдасться. Це правильний і ненадійний спосіб зробити переадресацію.
Ендрю Мур

3
Ендрю: як браузер HTTP не може поважати Місцезнаходження:
vartec

102

Виведіть JavaScript з PHP за допомогою echo, що зробить цю роботу.

echo '<script type="text/javascript">
           window.location = "http://www.google.com/"
      </script>';

Ви дійсно не можете це зробити в PHP, якщо ви не буферуєте вихід сторінки та потім пізніше перевірите стан перенаправлення. Це може бути занадто багато клопоту. Пам’ятайте, що заголовки - це перше, що надсилається зі сторінки. Більшість переспрямувань зазвичай вимагається пізніше на сторінці. Для цього вам потрібно запанувати весь вихід сторінки та перевірити стан переадресації пізніше. У цей момент ви можете або перенаправити заголовок користувача сторінки (), або просто відлучити буферований вихід.

Докладніше про буферизацію (переваги)

Що таке буферизація на виході?


2
Проста і суттєва відповідь! Відмінно підходить для простого перенаправлення сторінки!
Статіс Андронікос

І таким чином ви не зіткнетесь із поширеною Cannot modify header information - headers already sent byпомилкою.
Кай Ноак

1
@hmd, що робити, якщо JavaScript відключений?
Істьяк Ахмед

@IstiaqueAhmed JavaScript майже завжди вмикається в ці дні, але якщо він відключений, ви можете використовувати PHP буфер. Це питання ТАК відповідає на це. Якщо ви використовуєте PHP Buffering, то вам не потрібен цей метод, який я знаходжу.
Хаммад Хан

Помилково, ви можете (і повинні) робити це в PHP навіть без буферизації: на добре розробленій сторінці всі відповідні обробки PHP повинні відбуватися до того, як будь-який вміст HTML буде надісланий користувачеві. Таким чином PHP переспрямування буде добре працювати.
MestreLion

91

1. Використання функції заголовка за допомогою exit()

<?php 
     header('Location: target-page.php');
     exit();
?>

але якщо ви використовуєте функцію заголовка, то кілька разів ви отримаєте "попередження, як заголовок вже надсилається", щоб вирішити, що не лунає і не друкується перед надсиланням заголовків, або ви можете просто використовувати die()або exit()після функції заголовка.

2. Без заголовка

<?php 
    echo "<script>location.href='target-page.php';</script>";
?>

тут ви не зіткнетесь із жодною проблемою

3. Використання функції заголовка за допомогою ob_start()таob_end_flush()

<?php
ob_start(); //this should be first line of your page
header('Location: target-page.php');
ob_end_flush(); //this should be last line of your page
?>

Працюй як шарм. Я використовую <? Php echo "<script> location.href = ' google.fr/ '; </script >"; ?> Щоб перевірити це, і він зробив те, що хотів
DoctorDroid Гаїті

1
Друге рішення не працюватиме з вимкненим JS.
Тажні

55

Більшість із цих відповідей забувають дуже важливий крок!

header("Location: myOtherPage.php");
die();

Якщо вийти з цього життєво важливого другого рядка, можливо, ви побачите, що ви потрапили на Daily WTF . Проблема полягає в тому, що браузерам не потрібно поважати заголовки, які повертає ваша сторінка, тому при ігноруванні заголовків решта сторінки буде виконана без перенаправлення.


1
Що про те, щоб дати деякий вихід користувачеві, перш ніж вбити сценарій? Ви знаєте, люди люблять знати, що відбувається ...
Strae

3
ви припускаєте, що сценарій не має нічого спільного, крім переадресації. Що може бути зовсім неправдою.
vartec

13
@DaNieL: зміни його на смерть ("Перестань ігнорувати мої заголовки!")
nickf

3
Мені сподобалося те просте пояснення, яке die();ви дали - якщо ви цього не робите, користувач може на мить побачити повну сторінку, якщо ви її використовуєте; користувач буде переспрямований, і жоден тимчасовий збіг не відображатиметься + 1
TheBlackBenzKid

Можливо, корисна активність відбуватиметься після надсилання заголовка, діяльність, яка нічого не надсилає до браузера, але записує активність або завершує запис транзакцій. З цієї причини потреба в die / exit залежить від сценарію.
DanAllen

28

Використання:

<?php header('Location: another-php-file.php'); exit(); ?>

Або якщо ви вже відкрили теги PHP, використовуйте це:

header('Location: another-php-file.php'); exit();

Ви також можете перенаправляти на зовнішні сторінки, наприклад:

header('Location: https://www.google.com'); exit();

Переконайтеся, що ви включите exit()або включите die().


25

Ви можете використовувати змінні сеансу для управління доступом до сторінок та авторизації дійсних користувачів:

<?php
    session_start();

    if (!isset( $_SESSION["valid_user"]))
    {
        header("location:../");
        exit();
    }

    // Page goes here
?>

http://php.net/manual/en/reserved.variables.session.php .

Нещодавно я отримав кібератаки і вирішив, що мені потрібно було знати користувачів, які намагаються отримати доступ до Панелі адміністраторів або зарезервованої частини веб-програми.

Отже, я додав доступ до журналу для IP-адреси та сеансів користувача у текстовому файлі, тому що не хочу турбувати свою базу даних.


19

Багато з цих відповідей є правильними, але вони припускають, що у вас є абсолютна URL-адреса, що може бути не так. Якщо ви хочете використовувати відносну URL-адресу і генерувати решту, тоді ви можете зробити щось подібне ...

$url = 'http://' . $_SERVER['HTTP_HOST'];            // Get the server
$url .= rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); // Get the current directory
$url .= '/your-relative/path-goes/here/';            // <-- Your relative path
header('Location: ' . $url, true, 302);              // Use either 301 or 302

16

header( 'Location: http://www.yoursite.com/new_page.html' );


чи є спосіб перенаправлення до того, як браузер виявить протокол HTTP? тому мені потрібно переадресувати, тому що я не можу отримати достатньо сертифікатів SSL для всіх моїх доменів. я б хотів .htaccessпереспрямувати, але мені потрібен спосіб якось передати той домен, який перенаправлений на кінцевий домен?
oldboy

16

Використовуйте наступний код:

header("Location: /index.php");
exit(0);   

14

Я вже відповів на це запитання, але зроблю це ще раз, оскільки тим часом я дізнався, що існують особливі випадки, якщо ви працюєте в CLI (переадресації не можуть відбутися і, отже, не повинні exit()) або якщо ваш веб-сервер запуск PHP як (F) CGI ( Statusдля правильного перенаправлення йому потрібен попередньо встановлений заголовок).

function Redirect($url, $code = 302)
{
    if (strncmp('cli', PHP_SAPI, 3) !== 0)
    {
        if (headers_sent() !== true)
        {
            if (strlen(session_id()) > 0) // If using sessions
            {
                session_regenerate_id(true); // Avoids session fixation attacks
                session_write_close(); // Avoids having sessions lock other requests
            }

            if (strncmp('cgi', PHP_SAPI, 3) === 0)
            {
                header(sprintf('Status: %03u', $code), true, $code);
            }

            header('Location: ' . $url, true, (preg_match('~^30[1237]$~', $code) > 0) ? $code : 302);
        }

        exit();
    }
}

Я також опрацював питання про підтримку різних кодів HTTP перенаправлення ( 301, 302, 303і 307), так як він був розглянутий в коментарях мого попереднього відповіді. Ось описи:

  • 301 - Переїхав постійно
  • 302 - Знайдено
  • 303 - Див. Інше
  • 307 - Тимчасовий перенаправлення (HTTP / 1.1)

11

Щоб перенаправити відвідувача на іншу сторінку (особливо корисно в умовному циклі), просто використовуйте наступний код:

<?php
    header('Location: mypage.php');
?>

У цьому випадку mypage.php- це адреса сторінки, на яку ви хочете перенаправити відвідувачів. Ця адреса може бути абсолютною, а також може містити параметри в цьому форматі:mypage.php?param1=val1&m2=val2)

Відносний / абсолютний шлях

Маючи справу з відносними або абсолютними шляхами, ідеально вибрати абсолютний шлях від кореня сервера (DOCUMENT_ROOT). Використовуйте наступний формат:

<?php
    header('Location: /directory/mypage.php');
?>

Якщо коли-небудь цільова сторінка знаходиться на іншому сервері, ви включаєте повну URL-адресу:

<?php
    header('Location: http://www.ccm.net/forum/');
?>

HTTP заголовки

Відповідно до протоколу HTTP, заголовки HTTP повинні бути надіслані before будь-який тип вмісту. Це означає, що жоден символ не повинен надсилатися перед заголовком - навіть порожній пробіл!

Тимчасові / постійні перенаправлення

За замовчуванням тип перенаправлення, представлений вище, є тимчасовим. Це означає, що пошукові системи, такі як пошук Google, не будуть враховувати перенаправлення під час індексації.

Якщо ви хочете повідомити пошукові системи, що сторінка була постійно переміщена в інше місце, скористайтеся таким кодом:

<?
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: new_address');
?>

Наприклад, на цій сторінці є такий код:

<?
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: /pc/imprimante.php3');
    exit();
?>

Коли ви натискаєте на посилання вище, вас автоматично переспрямовують на цю сторінку. Більше того, це постійне перенаправлення (Статус: 301 Перенесено постійно). Отже, якщо ви введете першу URL-адресу в Google, ви автоматично будете перенаправлені на друге перенаправлене посилання.

Тлумачення PHP-коду

PHP-код, розташований після заголовка (), буде інтерпретований сервером, навіть якщо відвідувач переміститься за адресою, вказаною в переадресації. У більшості випадків це означає, що вам потрібен метод для виконання header()функції exit()функції, щоб зменшити навантаження сервера:

<?
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: address');
    exit();
?>

Чому (наприкінці другого абзацу)? Ти &paraнатомість маєш на увазі (так читає цілий mypage.php?param1=val1&param2=val2))? (HTML - об'єкт пункт ) є «¶» - можливо , якась - то зовнішня програма зробила перетворення?).
Пітер Мортенсен

9

Використання:

<?php
    header('Location: redirectpage.php');
    header('Location: redirectpage.php');
    exit();
    echo "<script>location.href='redirectpage.php';</script>";
?>

Це звичайне і звичайне перенаправлення PHP, але ви можете зробити сторінку перенаправлення, зачекавши декілька секунд, виконавши наведений нижче код:

<?php
    header('refresh:5;url=redirectpage.php '); // Note: here 5 means 5 seconds wait for redirect.
?>

7

Напередодні семантичної павутини правильність - це те, що слід враховувати. На жаль, заголовок PHP "Місцезнаходження" все ще використовує код перенаправлення HTTP 302 , який, суворо, не найкращий для перенаправлення. Той, який він повинен використовувати замість цього, - це 303 .

W3C є досить люб'язним, щоб зазначити, що заголовок 303 несумісний із "багатьма користувацькими агентами до HTTP / 1.1", що не означало б браузера в поточному використанні. Отже, 302 - це пережиток, який не повинен слід використовувати.

... або ви могли просто проігнорувати це, як і всі ...


7

Ви можете використовувати деякі методи JavaScript, як показано нижче

  1. self.location="http://www.example.com/index.php";

  2. window.location.href="http://www.example.com/index.php";

  3. document.location.href = 'http://www.example.com/index.php';

  4. window.location.replace("http://www.example.com/index.php");


Javascript працює на клієнті, який може бути або не бути тим, що ви шукаєте.
chharvey

7

Так, ви можете використовувати функцію header () ,

header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
exit();

А також найкраща практика - викликати функцію exit () відразу після header()функції, щоб уникнути виконання коду нижче.

Згідно з документацією, header()потрібно викликати перед тим, як надсилати будь-який фактичний вихід.


6

Як сказали інші тут, надсилаючи заголовок місцезнаходження із:

header( "Location: http://www.mywebsite.com/otherpage.php" );

але це потрібно зробити перед тим, як надіслати будь-який інший вихід у браузер.

Крім того, якщо ви збираєтеся використовувати це для блокування неавторизованих користувачів з певних сторінок, як ви вже згадували, майте на увазі, що деякі користувацькі агенти ігноруватимуть це та продовжуватимуться на поточній сторінці в будь-якому разі, тому вам потрібно померти ( ) після надсилання.


but you need to do it before you've sent any other output to the browser. Дивовижно !! Хвилини шукали, чому я продовжував отримувати заголовки, які вже надсилали помилку. +1 !!
Джош

Загалом, у вас є / повністю зупиніть свій сценарій /. die()це лише один із способів зробити це.
MauganRa

6

Ось мої думки:

IMHO, найкращим способом перенаправити вхідний запит було б за допомогою заголовків місцеположення, що й стосується

<?php
    header("Location: /index.php");
?>

Після того, як ця операція буде виконана і вихід буде надісланий, браузер почне перенаправляти користувача. Однак переконайтесь, що перед надсиланням заголовків не було жодного результату (будь-якого echo / var_dump), інакше це призведе до помилок.

Хоча це швидкий і брудний спосіб досягти того, що спочатку просили, це в кінцевому підсумку виявиться SEO-катастрофою, оскільки такий вид переадресації завжди трактується як переадресація 301/302, отже пошукові системи завжди будуть бачити ваш індексну сторінку як перенаправлену сторінку, а не щось цільову сторінку / головну сторінку.

Отже, це вплине на параметри SEO на веб-сайті.


1
exit () слід використовувати відразу після заголовка ()
EKanadily

@docesam .. погодився .. виклик () слід негайно викликати після виклику header (). Однак я відчуваю, що якщо у цього браузера більше немає виводу після цього твердження заголовка (), вихід () може не знадобитися - Просто моя думка
Bhaskar Pramanik,

так, але ви повинні пояснити це, оскільки хтось міг скопіювати ваш рядок коду до його сценарію, і це потенційно може спричинити довгі круги навколо себе, з'ясовуючи, що пішло не так.
EKanadily

1
@BhaskarPramanik уявіть, що вам доведеться швидко зачинити двері, але тоді вам доведеться знову їх потягнути / натиснути / розбити, щоб переконатися, що вона вже заблокована чи ні ..
aswzen

5

Найкращий спосіб перенаправити PHP - це наступний код ...

 header("Location: /index.php");

Переконайтеся, що після цього жоден код не працюватиме

header("Location: /index.php");

Весь код повинен бути виконаний перед вищевказаним рядком.

Припустимо,

Випадок 1:

echo "I am a web developer";
header("Location: /index.php");

Він належним чином переспрямовує на місце (index.php).

Випадок 2:

return $something;
header("Location: /index.php");

Вищевказаний код не буде перенаправляти на місце (index.php).


Уже є відповідь, що містить 1085, яка містить надану вами інформацію, а також набагато більше.
Патрік Гунд

5

Так, можливо використовувати PHP. Ми переспрямовуємо на іншу сторінку.

Спробуйте наступний код:

<?php
    header("Location:./"); // Redirect to index file
    header("Location:index.php"); // Redirect to index file
    header("Location:example.php");
?>

4

1. Використання headerвбудованої функції PHP

а) Просте перенаправлення без параметрів

<?php
   header('Location: index.php');
?>

б) Перенаправлення з параметрами GET

<?php
      $id = 2;
      header("Location: index.php?id=$id&msg=succesfully redirect");
  ?>

2. Перенаправлення з JavaScript на PHP

а) Просте перенаправлення без параметрів

<?php
     echo "<script>location.href='index.php';</script>";
 ?>

б) Перенаправлення з параметрами GET

<?php
     $id = 2;
     echo "<script>location.href='index.php?id=$id&msg=succesfully redirect';</script>";
   ?>

Біт JavaScript якось був єдиним, що працювало в остаточному розміщенні сайту; Я вважаю, що це справа кешування, але я вирішив це відразу.
cdsaenz

3

Ми можемо це зробити двома способами:

  1. Коли користувач заходить на https://bskud.com/PINCODE/BIHAR/index.php, тоді переспрямуйте на https://bskud.com/PINCODE/BIHAR.php

    За наведеним нижче кодом PHP

    <?php
        header("Location: https://bskud.com/PINCODE/BIHAR.php");
        exit;
    ?>

    Збережіть наведений вище код на https://bskud.com/PINCODE/BIHAR/index.php

  2. Коли будь-яка умова відповідає, перенаправляйте на іншу сторінку:

    <?php
        $myVar = "bskud";
        if ($myVar == "bskud") {
    ?>
    
    <script> window.location.href="https://bskud.com";  </script>
    
    <?php
        }
        else {
            echo "<b>Check the website name again</b>";
        }
    ?>

Що це? Будь ласка, не використовуйте посилання на ваш власний веб-сайт. І другий приклад використовує переспрямування javascript, а не функцію PHP header().
Сценарист

2

Використання:

<?php
    $url = "targetpage"
    function redirect$url(){
        if (headers_sent()) == false{
            echo '<script>window.location.href="' . $url . '";</script>';
        }
    }
?>

1
Чи можете ви пояснити функцію коду? Ваша відповідь позначена через її довжину та зміст.
www139

2

Існує кілька способів зробити це, але якщо ви хочете php, я рекомендую використовуватиheader() функцію.

В основному

$your_target_url = www.example.com/index.php”;
header(“Location : $your_target_url”);
exit();

Якщо ви хочете підняти її на виїмку, найкраще використовувати її у функціях. Таким чином, ви можете додати в нього автентифікацію та інші перевіряючі елементи.

Давайте спробуємо, перевіривши рівень користувача.

Отже, припустимо, що ви зберегли рівень повноважень користувача в сеансі, який називається u_auth.

В function.php

<?php
    function authRedirect($get_auth_level,
                          $required_level,
                          $if_fail_link = www.example.com/index.php”){
        if ($get_auth_level != $required_level){
            header(location : $if_fail_link);
            return false;
            exit();
        }
        else{
            return true;
        }
     }

     . . .

Потім ви будете викликати функцію для кожної сторінки, яку ви хочете пройти автентифікацію.

Як і на page.phpбудь-якій іншій сторінці.

<?php

    // page.php

    require function.php

    // Redirects to www.example.com/index.php if the
    // user isn’t authentication level 5
    authRedirect($_SESSION[‘u_auth’], 5);

    // Redirects to www.example.com/index.php if the
    // user isn’t authentication level 4
    authRedirect($_SESSION[‘u_auth’], 4);

    // Redirects to www.someotherplace.com/somepage.php if the
    // user isn’t authentication level 2
    authRedirect($_SESSION[‘u_auth’], 2, www.someotherplace.com/somepage.php”);

    . . .

Список літератури;


2

Мені подобається вид перенаправлення з часом.

<?php

header("Refresh: 5;url=índex.php");

2

Використання функції заголовка для маршрутизації

<?php
     header('Location: B.php');
     exit();
?>

Припустимо, ми хочемо перейти з файлу A.php до B.php, ніж нам потрібно скористатися допомогою <button>або <a>. Давайте подивимось приклад

<?php
if(isset($_GET['go_to_page_b'])) {
    header('Location: B.php');
    exit();

}
?>

<p>I am page A</p>
<button name='go_to_page_b'>Page B</button>

B.php

<p> I am Page B</p>

Чи можете ви надати точне рішення чи гарне?
Мехеді Абдулла

Рішень вже багато. У вашому рішенні є змішані HTML та PHP без тегів PHP. По-друге, ви надсилаєте заголовок після друку html-коду, тому він не працюватиме. І назва прикладних файлів погана. Не слід називати їх A.php та B.php. Я знаю, що це лише приклад, але все ж вам слід подбати про іменування конвенції.
Тажні

1

Якщо ви працюєте на Apache, ви також можете використовувати .htaccess для переадресації.

Redirect 301 / http://new-site.com/

1

Ви можете спробувати використовувати функцію PHP, headerщоб зробити переадресацію. Ви хочете встановити вихідний буфер, щоб ваш браузер не кидав попередження про переадресацію на екран.

ob_start();
header("Location: " . $website);
ob_end_flush();

1
exit () слід використовувати відразу після заголовка (). також буферизація автоматично автоматично включається за замовчуванням.
EKanadily

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.