Apakah mungkin mengarahkan pengguna ke halaman lain melalui penggunaan PHP?
Katakanlah pengguna pergi ke www.example.com/page.php
dan saya ingin mengarahkan mereka ke www.example.com/index.php
, bagaimana saya akan melakukannya tanpa menggunakan meta refresh? Apa itu mungkin?
Ini bahkan dapat melindungi halaman saya dari pengguna yang tidak sah.
protection from unauthorized users
via redirect; ini bukan bagaimana hal-hal harus dilakukan;)Jawaban:
Ringkasan jawaban yang ada ditambah dua sen saya sendiri:
1. Jawaban dasar
Anda dapat menggunakan
header()
fungsi untuk mengirim header HTTP baru, tetapi ini harus dikirim ke browser sebelum HTML atau teks apa pun (jadi sebelum<!DOCTYPE ...>
deklarasi, misalnya).2. Detail penting
mati () atau keluar ()
Mengapa Anda harus menggunakan
die()
atauexit()
: The Daily WTFURL absolut atau relatif
Sejak Juni 2014, URL absolut dan relatif dapat digunakan. Lihat RFC 7231 yang telah menggantikan RFC 2616 lama , di mana hanya URL absolut yang diizinkan.
Kode Status
Header "Lokasi" PHP masih menggunakan kode HTTP- directirect HTTP 302 , tetapi ini bukan kode yang harus Anda gunakan. Anda harus mempertimbangkan 301 (pengalihan permanen) atau 303 (lainnya).
Catatan: W3C menyebutkan bahwa 303-header tidak kompatibel dengan "banyak agen pengguna pra-HTTP / 1.1. Browser yang saat ini digunakan adalah semua agen pengguna HTTP / 1.1. Ini tidak berlaku untuk banyak agen pengguna lain seperti spider dan robot.
3. Dokumentasi
Tajuk HTTP dan
header()
fungsinya dalam PHP4. Alternatif
Anda dapat menggunakan metode alternatif
http_redirect($url);
yang membutuhkan paket PECL untuk diinstal.5. Fungsi Pembantu
Fungsi ini tidak memasukkan kode status 303:
Ini lebih fleksibel:
6. Penanganan masalah
Seperti yang disebutkan
header()
arahan ulang hanya bekerja sebelum ada yang ditulis. Mereka biasanya gagal jika dipanggil dalam output HTML pertengahan . Maka Anda dapat menggunakan solusi header HTML (tidak terlalu profesional!) Seperti:Atau bahkan pengalihan JavaScript.
sumber
header('Location: '.$newURL);
harus sebelum HTML (atau teks) apa pun telah diteruskan ke browser, atau itu tidak akan berfungsi dengan benar.http-equiv="Location"
tidak didukung oleh semua browser. Anda harus menggunakannyarefresh
!<meta http-equiv="refresh" content="0;url=http://example.com/">
Gunakan
header()
fungsi ini untuk mengirim tajuk HTTPLocation
:Bertentangan dengan apa yang beberapa orang pikirkan,
die()
tidak ada hubungannya dengan pengalihan. Gunakan hanya jika Anda ingin mengarahkan alih - alih eksekusi normal.File example.php :
Hasil dari tiga eksekusi:
Melanjutkan - wajib
die()
/exit()
adalah beberapa legenda urban yang tidak ada hubungannya dengan PHP yang sebenarnya. Itu tidak ada hubungannya dengan klien "menghormati"Location:
header. Mengirim header tidak menghentikan eksekusi PHP, terlepas dari klien yang digunakan.sumber
exit()
adalah untuk mencegah halaman menampilkan konten yang tersisa (pikirkan halaman terbatas). vartec benar, itu tidak ada hubungannya dengan header Lokasi HTTP dan Anda tidak perlu melakukannyaexit
. Saya memilih untuk memasukkannya dalam jawaban saya karena, bagi seseorang yang tidak tahu bagaimana melakukan redirect sederhana , orang mungkin juga bermain aman daripada tidak menerapkan langkah sederhana namun penting hanya supaya dia dapat mengambil keuntungan dari proses lanjutan kontrol..htaccess
untuk mengarahkan ulang, tetapi saya perlu cara untuk entah bagaimana meneruskan domain mana yang diarahkan ke domain akhir?Jangan lupa untuk mati () / keluar ()!
sumber
Output JavaScript dari PHP menggunakan echo, yang akan melakukan pekerjaan itu.
Anda tidak dapat benar-benar melakukannya dalam PHP kecuali Anda buffer output halaman dan kemudian memeriksa kondisi redirect. Itu mungkin terlalu merepotkan. Ingat bahwa tajuk adalah hal pertama yang dikirim dari halaman. Sebagian besar pengalihan biasanya diperlukan nanti di halaman. Untuk itu Anda harus melakukan buffer semua output halaman dan memeriksa kondisi redirect nanti. Pada titik itu Anda dapat mengarahkan ulang tajuk pengguna halaman () atau cukup menggemakan output buffered.
Untuk lebih lanjut tentang buffering (keuntungan)
Apa itu buffering output?
sumber
Cannot modify header information - headers already sent by
kesalahan umum .tetapi jika Anda menggunakan fungsi tajuk maka beberapa kali Anda akan mendapatkan "peringatan seperti tajuk sudah dikirim" untuk menyelesaikan yang tidak menggema atau mencetak sebelum mengirim tajuk atau Anda dapat menggunakan
die()
atauexit()
setelah fungsi tajuk.di sini Anda tidak akan menghadapi masalah
sumber
Sebagian besar jawaban ini melupakan langkah yang sangat penting!
Meninggalkan baris kedua yang penting itu mungkin membuat Anda berakhir di The Daily WTF . Masalahnya adalah browser tidak harus menghormati header yang halaman Anda kembalikan, jadi dengan header yang diabaikan, sisa halaman akan dieksekusi tanpa arahan ulang.
sumber
die();
Anda berikan - jika Anda tidak melakukannya, pengguna dapat melihat halaman lengkap sejenak jika Anda menggunakannya; pengguna akan dialihkan dan tidak ada kesalahan konten sementara akan menunjukkan +1Menggunakan:
Atau jika Anda sudah membuka tag PHP, gunakan ini:
Anda juga dapat mengarahkan ke halaman eksternal, misalnya:
Pastikan Anda memasukkan
exit()
atau memasukkandie()
.sumber
Anda dapat menggunakan variabel sesi untuk mengontrol akses ke halaman dan mengotorisasi pengguna yang valid juga:
http://php.net/manual/en/reserved.variables.session.php .
Baru-baru ini, saya mendapat serangan dunia maya dan memutuskan, saya perlu tahu para pengguna yang mencoba mengakses Panel Admin atau bagian cadangan dari Aplikasi web.
Jadi, saya menambahkan akses log untuk alamat IP dan sesi pengguna dalam file teks, karena saya tidak ingin mengganggu database saya.
sumber
Banyak dari jawaban ini benar, tetapi mereka menganggap Anda memiliki URL absolut, yang mungkin tidak demikian. Jika Anda ingin menggunakan URL relatif dan menghasilkan sisanya, maka Anda dapat melakukan sesuatu seperti ini ...
sumber
header( 'Location: http://www.yoursite.com/new_page.html' );
sumber
.htaccess
untuk mengarahkan ulang, tetapi saya perlu cara untuk entah bagaimana meneruskan domain mana yang diarahkan ke domain akhir?Gunakan kode berikut:
sumber
Saya sudah menjawab pertanyaan ini, tetapi saya akan melakukannya lagi karena sementara itu saya telah belajar bahwa ada kasus-kasus khusus jika Anda menjalankan CLI (pengalihan tidak dapat terjadi dan karenanya tidak boleh
exit()
) atau jika server web Anda menjalankan PHP sebagai (F) CGI (perluStatus
header yang sebelumnya diatur untuk mengarahkan ulang dengan benar).Saya juga sudah menangani masalah ini mendukung kode HTTP redirection yang berbeda (
301
,302
,303
dan307
), seperti yang dibahas dalam komentar-komentar dari jawaban saya sebelumnya. Berikut uraiannya:sumber
Untuk mengarahkan pengunjung ke halaman lain (khususnya berguna dalam loop kondisional), cukup gunakan kode berikut:
Dalam hal ini,
mypage.php
adalah alamat halaman yang Anda inginkan untuk mengarahkan pengunjung. Alamat ini bisa bersifat absolut dan mungkin juga menyertakan parameter dalam format ini:mypage.php?param1=val1&m2=val2)
Relative / Absolute Path
Saat berurusan dengan jalur relatif atau absolut, sangat ideal untuk memilih jalur absolut dari root server (DOCUMENT_ROOT). Gunakan format berikut:
Jika halaman target ada di server lain, Anda memasukkan URL lengkap:
Tajuk HTTP
Menurut protokol HTTP, header HTTP harus dikirim
before
semua jenis konten. Ini berarti bahwa tidak ada karakter yang harus dikirim sebelum header - bahkan tidak ada ruang kosong!Pengalihan Sementara / Permanen
Secara default, jenis pengalihan yang disajikan di atas adalah yang sementara. Ini berarti bahwa mesin pencari, seperti Google Search, tidak akan mempertimbangkan pengalihan saat pengindeksan.
Jika Anda ingin memberi tahu mesin pencari bahwa suatu halaman telah dipindahkan secara permanen ke lokasi lain, gunakan kode berikut:
Misalnya, halaman ini memiliki kode berikut:
Ketika Anda mengklik tautan di atas, Anda secara otomatis diarahkan ke halaman ini. Selain itu, ini merupakan pengalihan permanen (Status: 301 Dipindahkan Secara Permanen). Jadi, jika Anda mengetik URL pertama ke Google, Anda akan secara otomatis diarahkan ke tautan kedua, diarahkan.
Interpretasi Kode PHP
Kode PHP yang terletak setelah tajuk () akan ditafsirkan oleh server, bahkan jika pengunjung pindah ke alamat yang ditentukan dalam pengalihan. Dalam kebanyakan kasus, ini berarti bahwa Anda memerlukan metode untuk mengikuti
header()
fungsiexit()
fungsi untuk mengurangi beban server:sumber
¶
(mendekati akhir paragraf kedua)? Apakah maksud Anda¶
sebagai gantinya (jadi seluruh bacaanmypage.php?param1=val1¶m2=val2)
)? (HTML entity para ) adalah "¶" - mungkin beberapa program eksternal melakukan konversi)?.Menggunakan:
Ini adalah redirect PHP biasa dan normal, tetapi Anda dapat membuat halaman redirect dengan beberapa detik menunggu dengan kode di bawah ini:
sumber
Menjelang web semantik, kebenaran adalah sesuatu yang perlu dipertimbangkan. Sayangnya, "Lokasi" PHP-header masih menggunakan kode HTTP- directirect HTTP 302 , yang, sebenarnya, bukan yang terbaik untuk pengalihan. Yang seharusnya digunakan, adalah 303 .
W3C berbaik hati untuk menyebutkan bahwa 303-header tidak kompatibel dengan "banyak agen pengguna pra-HTTP / 1.1," yang berarti tidak ada browser yang digunakan saat ini. Jadi, 302 adalah peninggalan, yang seharusnya tidak digunakan.
... atau Anda bisa mengabaikannya, seperti orang lain ...
sumber
Anda dapat menggunakan beberapa metode JavaScript seperti di bawah ini
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");
sumber
Ya, Anda bisa menggunakan fungsi header () ,
Dan juga praktik terbaik adalah memanggil keluar () fungsi tepat setelah
header()
fungsi untuk menghindari eksekusi kode di bawah ini.Menurut dokumentasi,
header()
harus dipanggil sebelum output aktual dikirim.sumber
Seperti yang dikatakan orang lain di sini, mengirim tajuk lokasi dengan:
tetapi Anda harus melakukannya sebelum mengirim output lain ke browser.
Juga, jika Anda akan menggunakan ini untuk memblokir pengguna yang tidak diautentikasi dari halaman tertentu, seperti yang Anda sebutkan, perlu diingat bahwa beberapa agen pengguna akan mengabaikan ini dan melanjutkan ke halaman saat ini, jadi Anda harus mati ( ) setelah Anda mengirimnya.
sumber
but you need to do it before you've sent any other output to the browser.
Hebat !! Telah mencari beberapa menit tentang mengapa saya terus menerima header yang sudah mengirim kesalahan. +1 !!die()
hanyalah satu cara untuk melakukan itu.Inilah pikiran saya:
IMHO, cara terbaik untuk mengarahkan kembali permintaan yang masuk adalah dengan menggunakan header lokasi, yang berjalan
Setelah pernyataan ini dieksekusi, dan output dikirim, browser akan mulai mengarahkan kembali pengguna. Namun, pastikan bahwa belum ada output (echo / var_dump) sebelum mengirim header, jika tidak maka akan menyebabkan kesalahan.
Meskipun ini adalah cara cepat dan kotor untuk mencapai apa yang awalnya diminta, itu akhirnya akan menjadi bencana SEO, karena pengalihan seperti ini selalu diartikan sebagai pengalihan 301/302, maka mesin pencari akan selalu melihat Anda halaman indeks sebagai halaman arahan ulang, dan bukan halaman arahan / halaman utama.
Oleh karena itu akan mempengaruhi pengaturan SEO situs web.
sumber
Cara terbaik untuk mengarahkan ulang dengan PHP adalah kode berikut ...
Pastikan tidak ada kode yang akan berfungsi setelahnya
Semua kode harus dijalankan sebelum baris di atas.
Seharusnya,
Kasus 1:
Ini akan mengarahkan ulang dengan benar ke lokasi (index.php).
Kasus 2:
Kode di atas tidak akan mengarahkan ulang ke lokasi (index.php).
sumber
Ya, mungkin menggunakan PHP. Kami akan mengalihkan ke halaman lain.
Coba kode berikut:
sumber
1. Menggunakan
header
, fungsi PHP bawaana) Redirect sederhana tanpa parameter
b) Redirect dengan parameter GET
2. Redirect dengan JavaScript di PHP
a) Redirect sederhana tanpa parameter
b) Redirect dengan parameter GET
sumber
Kita dapat melakukannya dengan dua cara:
Ketika pengguna datang di https://bskud.com/PINCODE/BIHAR/index.php, kemudian arahkan ke https://bskud.com/PINCODE/BIHAR.php
Dengan kode PHP di bawah ini
Simpan kode di atas dalam https://bskud.com/PINCODE/BIHAR/index.php
Ketika kondisi apa pun benar maka arahkan ke halaman lain:
sumber
header()
fungsi PHP .Menggunakan:
sumber
Ada beberapa cara untuk melakukan ini, tetapi jika Anda lebih suka
php
, saya akan merekomendasikan penggunaanheader()
fungsi ini.Pada dasarnya
Jika Anda ingin menendang takik, yang terbaik adalah menggunakannya dalam fungsi. Dengan begitu, Anda dapat menambahkan otentikasi dan memeriksa elemnts lainnya di dalamnya.
Mari kita coba dengan memeriksa level pengguna.
Jadi, misalkan Anda telah menyimpan tingkat otoritas pengguna dalam sesi yang disebut
u_auth
.Dalam
function.php
Anda kemudian akan memanggil fungsi untuk setiap halaman yang ingin Anda otentikasi.
Seperti di
page.php
atau halaman lainnya.Referensi;
sumber
Saya suka jenis pengalihan dari waktu ke waktu.
sumber
Menggunakan fungsi header untuk routing
Misalkan kita ingin rute dari a.php file b.php daripada kita harus mengambil bantuan
<button>
atau<a>
. Mari kita lihat sebuah contohB.php
sumber
Jika Anda menjalankan di Apache Anda juga dapat menggunakan .htaccess untuk mengarahkan ulang.
sumber
Anda dapat mencoba menggunakan
header
fungsi PHP untuk melakukan pengalihan. Anda akan ingin mengatur buffer output sehingga browser Anda tidak melemparkan peringatan pengalihan ke layar.sumber
coba yang ini
sumber