Czy można przekierować użytkownika na inną stronę za pomocą PHP?
Powiedz, że użytkownik idzie www.example.com/page.php
i chcę go przekierować www.example.com/index.php
, jak miałbym to zrobić bez użycia odświeżania meta? Czy to możliwe?
Może to nawet chronić moje strony przed nieautoryzowanymi użytkownikami.
protection from unauthorized users
poprzez przekierowanie; nie tak należy to robić;)Odpowiedzi:
Podsumowanie istniejących odpowiedzi plus moje dwa centy:
1. Podstawowa odpowiedź
Możesz użyć tej
header()
funkcji do wysłania nowego nagłówka HTTP, ale musi on zostać przesłany do przeglądarki przed jakimkolwiek kodem HTML lub tekstem (<!DOCTYPE ...>
na przykład przed deklaracją).2. Ważne szczegóły
die () lub exit ()
Dlaczego warto używać
die()
lubexit()
: The Daily WTFBezwzględny lub względny adres URL
Od czerwca 2014 r. Można używać zarówno bezwzględnych, jak i względnych adresów URL. Zobacz RFC 7231, który zastąpił stary RFC 2616 , gdzie dozwolone były tylko bezwzględne adresy URL.
Kody stanu
Nagłówek „Lokalizacja” PHP nadal używa kodu przekierowującego HTTP 302 , ale nie należy go używać. Należy rozważyć 301 (stałe przekierowanie) lub 303 (inne).
Uwaga: W3C wspomina, że nagłówek 303 jest niezgodny z „wieloma klientami użytkownika wcześniejszymi niż HTTP / 1.1. Obecnie wszystkie przeglądarki są klientami HTTP / 1.1. Nie dotyczy to wielu innych programów użytkownika, takich jak pająki i roboty.
3. Dokumentacja
Nagłówki HTTP i
header()
funkcja w PHP4. Alternatywy
Możesz użyć alternatywnej metody,
http_redirect($url);
która wymaga zainstalowania pakietu PECL pakietu PECL .5. Funkcje pomocnicze
Ta funkcja nie zawiera kodu stanu 303:
Jest to bardziej elastyczne:
6. Obejście problemu
Jak wspomniano,
header()
przekierowania działają tylko zanim cokolwiek zostanie zapisane. Zwykle zawodzą, jeśli zostaną wywołane w środku HTML . Następnie możesz zastosować obejście nagłówka HTML (niezbyt profesjonalne!), Takie jak:Lub nawet przekierowanie JavaScript.
źródło
header('Location: '.$newURL);
musi być zanim jakiś HTML (lub tekst) zostanie przesłany do przeglądarki, inaczej nie będzie działać poprawnie.http-equiv="Location"
jest obsługiwany przez wszystkie przeglądarki. Zamiast tego powinieneś użyćrefresh
!<meta http-equiv="refresh" content="0;url=http://example.com/">
Użyj
header()
funkcji, aby wysłać nagłówek HTTPLocation
:W przeciwieństwie do tego, co myślą niektórzy,
die()
nie ma to nic wspólnego z przekierowaniem. Używaj go tylko wtedy, gdy chcesz przekierować zamiast normalnego wykonania.Plik example.php :
Wynik trzech egzekucji:
Wznawianie - obowiązkowe
die()
/exit()
to jakaś miejska legenda, która nie ma nic wspólnego z rzeczywistym PHP. Nie ma to nic wspólnego z „respektowaniem”Location:
nagłówka przez klienta . Wysłanie nagłówka nie zatrzymuje wykonywania PHP, niezależnie od używanego klienta.źródło
exit()
ma zapobiec wyświetlaniu przez stronę pozostałej zawartości (pomyśl o ograniczonych stronach). vartec ma rację, nie ma to nic wspólnego z nagłówkiem lokalizacji HTTP i nie musisz tego robićexit
. Postanowiłem uwzględnić to w mojej odpowiedzi, ponieważ dla kogoś, kto nie wie, jak wykonać proste przekierowanie, równie dobrze można grać bezpiecznie, a nie wdrażać prostego, ale kluczowego kroku, aby mógł skorzystać z zaawansowanego procesu kontrola..htaccess
do przekierowania, ale potrzebuję sposobu, aby jakoś przekazać domenę przekierowaną do końcowej domeny?Nie zapomnij umrzeć () / exit ()!
źródło
Wyjście JavaScript z PHP za pomocą echa, które wykona zadanie.
Naprawdę nie możesz tego zrobić w PHP, chyba że buforujesz dane wyjściowe strony, a następnie nie sprawdzasz warunku przekierowania. To może być zbyt kłopotliwe. Pamiętaj, że nagłówki są pierwszą rzeczą wysyłaną ze strony. Większość przekierowań jest zwykle wymagana później na stronie. W tym celu musisz buforować wszystkie dane wyjściowe strony i później sprawdzić stan przekierowania. W tym momencie możesz przekierować nagłówek użytkownika strony () lub po prostu powtórzyć buforowane wyjście.
Więcej informacji o buforowaniu (zalety)
Co to jest buforowanie wyjściowe?
źródło
Cannot modify header information - headers already sent by
błędu.ale jeśli użyjesz funkcji nagłówka, czasami pojawi się komunikat „ostrzeżenie, jak nagłówek już wysłany”, aby rozwiązać problem, że nie odbijają echa ani nie drukują przed wysłaniem nagłówków, albo możesz po prostu użyć
die()
lubexit()
po funkcji nagłówka.tutaj nie napotkasz żadnego problemu
źródło
Większość z tych odpowiedzi zapomina o bardzo ważnym kroku!
Pozostawienie tak ważnej drugiej linii może spowodować, że skończysz w The Daily WTF . Problem polega na tym, że przeglądarki nie muszą szanować nagłówków zwracanych przez stronę, więc ignorowanie nagłówków spowoduje, że reszta strony zostanie wykonana bez przekierowania.
źródło
die();
które podałeś - jeśli tego nie zrobisz, użytkownik może na chwilę zobaczyć całą stronę, jeśli z niej skorzystasz; użytkownik zostanie przekierowany i żadna tymczasowa usterka treści nie wyświetli + 1Posługiwać się:
Lub jeśli już otworzyłeś tagi PHP, użyj tego:
Możesz także przekierowywać na strony zewnętrzne, np .:
Pamiętaj, aby dołączyć
exit()
lub dołączyćdie()
.źródło
Możesz użyć zmiennych sesji, aby kontrolować dostęp do stron i autoryzować również prawidłowych użytkowników:
http://php.net/manual/en/reserved.variables.session.php .
Niedawno dostałem cyberataki i zdecydowałem, że muszę znać użytkowników próbujących uzyskać dostęp do panelu administracyjnego lub zarezerwowanej części aplikacji internetowej.
Dodałem więc dostęp do dziennika dla adresu IP i sesji użytkownika w pliku tekstowym, ponieważ nie chcę zawracać głowy mojej bazie danych.
źródło
Wiele z tych odpowiedzi jest poprawnych, ale zakładają, że masz bezwzględny adres URL, co może nie być prawdą. Jeśli chcesz użyć względnego adresu URL i wygenerować resztę, możesz zrobić coś takiego ...
źródło
header( 'Location: http://www.yoursite.com/new_page.html' );
źródło
.htaccess
do przekierowania, ale potrzebuję sposobu, aby jakoś przekazać domenę przekierowaną do końcowej domeny?Użyj następującego kodu:
źródło
Odpowiedziałem już na to pytanie, ale zrobię to jeszcze raz, ponieważ w międzyczasie dowiedziałem się, że istnieją specjalne przypadki, jeśli korzystasz z CLI (przekierowania nie mogą się zdarzyć i dlatego nie powinny
exit()
) lub jeśli twój serwer WWW jest uruchamianie PHP jako (F) CGI (potrzebujeStatus
poprawnie ustawionego nagłówka, aby poprawnie przekierować).Ja również obsługiwane problemu obsługiwać różne kody przekierowania HTTP (
301
,302
,303
i307
), jak zostało to omówione w komentarzach mojej poprzedniej odpowiedzi. Oto opisy:źródło
Aby przekierować użytkownika na inną stronę (szczególnie przydatne w pętli warunkowej), wystarczy użyć następującego kodu:
W takim przypadku
mypage.php
jest to adres strony, na którą chcesz przekierować użytkowników. Ten adres może być bezwzględny i może również zawierać parametry w tym formacie:mypage.php?param1=val1&m2=val2)
Ścieżka względna / bezwzględna
W przypadku ścieżek względnych lub bezwzględnych idealnie jest wybrać ścieżkę bezwzględną z katalogu głównego serwera (DOCUMENT_ROOT). Użyj następującego formatu:
Jeśli strona docelowa znajduje się na innym serwerze, dołącz pełny adres URL:
Nagłówki HTTP
Zgodnie z protokołem HTTP nagłówki HTTP muszą być wysyłane
before
dowolnego rodzaju treści. Oznacza to, że żadne znaki nie powinny być nigdy wysyłane przed nagłówkiem - nawet puste miejsce!Tymczasowe / stałe przekierowania
Domyślnie przedstawiony powyżej typ przekierowania jest tymczasowy. Oznacza to, że wyszukiwarki, takie jak wyszukiwarka Google, nie uwzględniają przekierowania podczas indeksowania.
Jeśli chcesz powiadomić wyszukiwarki, że strona została trwale przeniesiona do innej lokalizacji, użyj następującego kodu:
Na przykład ta strona ma następujący kod:
Po kliknięciu powyższego łącza nastąpi automatyczne przekierowanie do tej strony. Co więcej, jest to stałe przekierowanie (Status: 301 Przeniesiony na stałe). Tak więc, jeśli wpiszesz pierwszy adres URL w Google, nastąpi automatyczne przekierowanie do drugiego przekierowanego linku.
Interpretacja kodu PHP
Kod PHP umieszczony po nagłówku () zostanie zinterpretowany przez serwer, nawet jeśli użytkownik przejdzie na adres podany w przekierowaniu. W większości przypadków oznacza to, że potrzebujesz metody śledzenia
header()
funkcji tejexit()
funkcji, aby zmniejszyć obciążenie serwera:źródło
¶
(pod koniec drugiego akapitu)? Czy¶
zamiast tego masz na myśli (więc całość czytamypage.php?param1=val1¶m2=val2)
)? (Encja HTML para ) to „¶” - może jakiś program zewnętrzny dokonał konwersji?).Posługiwać się:
Jest to zwykłe i normalne przekierowanie PHP, ale możesz utworzyć stronę przekierowującą z kilkoma sekundami oczekiwania na poniższy kod:
źródło
W przeddzień sieci semantycznej należy wziąć pod uwagę poprawność. Niestety nagłówek PHP „Lokalizacja” nadal używa kodu przekierowania HTTP 302 , który, ściśle, nie jest najlepszy do przekierowania. Tym, którego powinien użyć, jest 303 .
W3C jest na tyle uprzejmy, że wspomina, że nagłówek 303 jest niezgodny z „wieloma klientami użytkownika wcześniejszymi niż HTTP / 1.1”, co oznaczałoby brak przeglądarki w bieżącym użyciu. 302 jest więc reliktem, którego nie należy używać.
... lub możesz to zignorować, jak wszyscy inni ...
źródło
Możesz użyć niektórych metod JavaScript, takich jak poniżej
self.location="http://www.example.com/index.php";
window.location.href="http://www.example.com/index.php";
document.location.href = 'http://www.example.com/index.php';
window.location.replace("http://www.example.com/index.php");
źródło
Tak, możesz użyć funkcji header () ,
A najlepszą praktyką jest wywoływanie funkcji exit () zaraz po
header()
funkcji, aby uniknąć wykonania poniższego kodu.Zgodnie z dokumentacją
header()
należy wywołać przed wysłaniem rzeczywistych danych wyjściowych.źródło
Jak powiedzieli inni tutaj, wysyłając nagłówek lokalizacji z:
ale musisz to zrobić, zanim prześlesz jakiekolwiek inne dane wyjściowe do przeglądarki.
Ponadto, jeśli zamierzasz użyć tego do blokowania nieautoryzowanych użytkowników na niektórych stronach, tak jak wspomniałeś, pamiętaj, że niektóre aplikacje klienckie zignorują to i będą kontynuować na bieżącej stronie, więc musisz umrzeć ( ) po wysłaniu.
źródło
but you need to do it before you've sent any other output to the browser.
Niesamowite!! Szukałem minut, dlaczego otrzymywałem błąd, który już wysłałem. +1 !!die()
jest tylko jednym ze sposobów, aby to zrobić.Oto moje przemyślenia:
IMHO, najlepszym sposobem na przekierowanie przychodzącego żądania byłoby użycie nagłówków lokalizacji
Po wykonaniu tej instrukcji i wysłaniu danych wyjściowych przeglądarka zacznie przekierowywać użytkownika. Upewnij się jednak, że przed wysłaniem nagłówków nie było żadnych danych wyjściowych (echo / var_dump), w przeciwnym razie doprowadzi to do błędów.
Chociaż jest to szybki i brudny sposób na osiągnięcie tego, o co pierwotnie pytano, ostatecznie okaże się katastrofą SEO, ponieważ tego rodzaju przekierowanie jest zawsze interpretowane jako przekierowanie 301/302, dlatego wyszukiwarki zawsze zobaczą twoje strona indeksu jako strona przekierowana, a nie strona docelowa / strona główna.
Wpłynie to na ustawienia SEO witryny.
źródło
Najlepszym sposobem przekierowania za pomocą PHP jest następujący kod ...
Upewnij się, że po tym kod nie będzie działał
Cały kod musi zostać wykonany przed powyższą linią.
Przypuszczać,
Przypadek 1:
Przekieruje poprawnie do lokalizacji (index.php).
Przypadek 2:
Powyższy kod nie przekieruje do lokalizacji (index.php).
źródło
Tak, można używać PHP. Przekierujemy na inną stronę.
Wypróbuj następujący kod:
źródło
1. Korzystanie
header
z wbudowanej funkcji PHPa) Proste przekierowanie bez parametrów
b) Przekieruj z parametrami GET
2. Przekieruj za pomocą JavaScript w PHP
a) Proste przekierowanie bez parametrów
b) Przekieruj z parametrami GET
źródło
Możemy to zrobić na dwa sposoby:
Gdy użytkownik wejdzie na https://bskud.com/PINCODE/BIHAR/index.php, przekieruj na https://bskud.com/PINCODE/BIHAR.php
Przez poniższy kod PHP
Zapisz powyższy kod w https://bskud.com/PINCODE/BIHAR/index.php
Jeśli dowolny warunek jest spełniony, przekieruj na inną stronę:
źródło
header()
.Posługiwać się:
źródło
Można to zrobić na wiele sposobów, ale jeśli wolisz
php
, polecam użycie tejheader()
funkcji.Gruntownie
Jeśli chcesz go podnieść, najlepiej użyć go w funkcjach. W ten sposób możesz dodawać do niego uwierzytelnienia i inne elementy sprawdzające.
Spróbujmy, sprawdzając poziom użytkownika.
Załóżmy zatem, że zapisałeś poziom uprawnień użytkownika w sesji o nazwie
u_auth
.w
function.php
Następnie wywołasz funkcję dla każdej strony, którą chcesz uwierzytelnić.
Jak na
page.php
lub na innej stronie.Bibliografia;
źródło
Z czasem podoba mi się rodzaj przekierowania.
źródło
Korzystanie z funkcji nagłówka do routingu
Załóżmy, że chcemy trasować z pliku A.php do B.php, niż musimy skorzystać z pomocy
<button>
lub<a>
. Zobaczmy przykładB.php
źródło
Jeśli korzystasz z Apache, możesz również użyć .htaccess do przekierowania.
źródło
Możesz spróbować użyć
header
funkcji PHP, aby wykonać przekierowanie. Będziesz chciał ustawić bufor wyjściowy, aby Twoja przeglądarka nie wyświetlała ostrzeżenia o przekierowaniu na ekran.źródło
Spróbuj tego
źródło