Saya menggunakan kode ini untuk mendapatkan URL lengkap:
$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
Masalahnya adalah bahwa saya menggunakan beberapa topeng di saya .htaccess
, jadi apa yang kita lihat di URL tidak selalu path sebenarnya dari file tersebut.
Yang saya butuhkan adalah mendapatkan URL, apa yang tertulis dalam URL, tidak lebih dan tidak kurang — URL lengkap.
Saya perlu mengetahui bagaimana tampilannya di Bilah Navigasi di browser web, dan bukan path sebenarnya dari file di server.
Jawaban:
Lihatlah
$_SERVER['REQUEST_URI']
, yaitu(Perhatikan bahwa sintaks string ganda yang dikutip benar sekali )
Jika Anda ingin mendukung HTTP dan HTTPS, Anda dapat menggunakan
Catatan editor: menggunakan kode ini memiliki implikasi keamanan . Klien dapat mengatur HTTP_HOST dan REQUEST_URI ke nilai sewenang-wenang yang diinginkannya.
sumber
'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . "{$_SERVER['HTTP_HOST']}/{$_SERVER['REQUEST_URI']}"
Tautan versi singkat ke keluaran di laman web
Berikut adalah beberapa detail tentang masalah dan kasus tepi format //example.com/path/
Versi lengkap
Ini adalah versi yang sangat dimodifikasi
http://snipplr.com/view.php?codeview&id=2734
.Struktur URL:
skema: // nama pengguna: kata sandi @ domain: port / path? query_string # fragment_id
Bagian yang dicetak tebal tidak akan dimasukkan oleh fungsi
Catatan:
username:password
dari URL lengkap atau fragmen (hash).#fragment_id
tidak dikirim ke server oleh klien (browser) dan tidak akan ditambahkan ke URL lengkap.$_GET
hanya akan berisifoo=bar2
untuk URL seperti/example?foo=bar1&foo=bar2
.$_SERVER['REQUEST_URI']
dan kembali/example?foo=bar2
untuk URL seperti/example?foo=bar1&foo=bar2
, gunakan$_SERVER['QUERY_STRING']
dalam kasus ini.URL + URN
, tetapi karena penggunaan yang populer, URL sekarang berarti URI dan URL.HTTP_X_FORWARDED_HOST
jika Anda tidak berencana untuk menggunakan proxy atau penyeimbang.Host
sundulan harus berisi nomor port kecuali nomor default.Variabel yang dikendalikan klien (Browser):
$_SERVER['REQUEST_URI']
. Setiap karakter yang tidak didukung dikodekan oleh browser sebelum dikirim.$_SERVER['HTTP_HOST']
dan tidak selalu tersedia sesuai dengan komentar dalam manual PHP: http://php.net/manual/en/reserved.variables.php$_SERVER['HTTP_X_FORWARDED_HOST']
diatur oleh penyeimbang dan tidak disebutkan dalam daftar$_SERVER
variabel dalam manual PHP.Variabel yang dikendalikan server:
$_SERVER['HTTPS']
. Klien memilih untuk menggunakan ini, tetapi server mengembalikan nilai aktual kosong atau "pada".$_SERVER['SERVER_PORT']
. Server hanya menerima nomor yang diizinkan sebagai port.$_SERVER['SERVER_PROTOCOL']
. Server hanya menerima protokol tertentu.$_SERVER['SERVER_NAME']
. Sudah diatur secara manual dalam konfigurasi server dan tidak tersedia untuk IPv6 menurut kralyk .Terkait:
HTTP_HOST vs. SERVER_NAME
Apakah Nomor Port Diperlukan dalam Parameter Header HTTP "Host"?
https://stackoverflow.com/a/28049503/175071
sumber
$_SERVER['REQUEST_URI']
akan tampil/example?foo=bar2
untuk url seperti/example?foo=bar1&foo=bar2
Host
header, belum melihatnya diatur seperti itu, terima kasih karena menyebutkannya, akan menambahkannya sebagai tweakContoh untuk:
https://(www.)example.com/subFolder/myfile.php?var=blabla#555
Memperhatikan ! ! !
#
bagian hashtag secara manual digunakan dalam contoh di atas hanya untuk tujuan ilustrasi, namun, bahasa sisi-server (termasukphp
) tidak dapat mendeteksi secara asli (Hanya Javascript yang dapat melakukannya, karena hanya tagar yangbrowser/client side
berfungsi).DIRECTORY_SEPARATOR
kembali\
untuk hosting tipe Windows, bukan/
.Untuk WordPress
sumber
Inilah solusi menggunakan pernyataan ternary , menjaga kode minimal:
Ini adalah cara terkecil dan termudah untuk melakukan ini, dengan asumsi server web seseorang menggunakan port standar 443 untuk HTTPS .
sumber
$_SERVER["HTTPS"] == "on"
untuk memeriksa apakah SSL aktif.Metode lintas platform favorit saya untuk menemukan URL saat ini adalah:
sumber
Cukup gunakan:
sumber
http://example.com
:8080
/request.php
dan gagal. Jawaban ini rumit karena suatu alasan.Catatan: Saya baru saja memperbarui kode Timo Huovinen , jadi Anda tidak akan mendapatkan parameter GET di URL. URL ini polos dan menghapus hal-hal seperti
?hi=i&am=a&get
.Contoh:
akan ditampilkan sebagai:
Ini baik-baik saja kecuali Anda menggunakan parade GET untuk mendefinisikan beberapa konten tertentu, dalam hal ini Anda harus menggunakan kodenya! :-)
sumber
Hapus kode, berfungsi di semua server web (Apache, nginx, IIS, ...):
sumber
Ini solusi saya - kode diinspirasi oleh Tracy Debugger . Itu diubah untuk mendukung port server yang berbeda. Anda bisa mendapatkan URL lengkap saat ini termasuk
$_SERVER['REQUEST_URI']
atau hanya URL server dasar. Periksa fungsi saya:Berikut ini adalah kode tes:
sumber
http_build_url
membutuhkan pecl_http diinstalMenggunakan:
Jika Anda ingin mendukung HTTP dan HTTPS:
sumber
Teknik yang sama dengan jawaban yang diterima, tetapi dengan dukungan HTTPS , dan lebih mudah dibaca:
sumber
Saya telah membuat fungsi ini untuk menangani URL:
sumber
Gunakan lapisan satu ini untuk menemukan URL folder induk (jika Anda tidak memiliki akses ke http_build_url () yang disertakan bersama pecl_http):
sumber
Ini cukup mudah dilakukan dengan variabel lingkungan Apache Anda. Ini hanya berfungsi dengan Apache 2, yang saya anggap Anda gunakan.
Cukup gunakan kode PHP berikut:
sumber
Coba ini:
$_SERVER
adalah array yang berisi informasi seperti header, jalur, dan lokasi skrip. Entri dalam array ini dibuat oleh server web. Tidak ada jaminan bahwa setiap server web akan menyediakan semua ini; server dapat menghilangkan beberapa, atau menyediakan yang lain yang tidak tercantum di sini. Yang mengatakan, sejumlah besar variabel-variabel ini dicatat dalam spesifikasi »CGI / 1.1, sehingga Anda harus dapat mengharapkan mereka.$HTTP_SERVER_VARS
berisi informasi awal yang sama, tetapi bukan superglobal. (Perhatikan bahwa$HTTP_SERVER_VARS
dan$_SERVER
merupakan variabel yang berbeda dan PHP menanganinya seperti itu)sumber
Anda dapat menggunakan http_build_url tanpa argumen untuk mendapatkan URL lengkap dari halaman saat ini:
sumber
Saya telah membuat kelas ini untuk menangani URI saya
Tentu saja Anda harus menyesuaikannya dengan kebutuhan dan sistem Anda !?
Itu masih perlu disempurnakan tetapi itu adalah solusi terbaik untuk sistem URI terpusat: D
sumber
Ini adalah solusi untuk masalah Anda:
sumber
Saya menggunakan pernyataan ini.
Saya harap ini akan membantu Anda.
sumber
sumber
Saya telah menggunakan kode di bawah ini, dan berfungsi dengan baik untuk saya, untuk kedua kasus, HTTP dan HTTPS.
Demo
sumber
$_SERVER['HTTPS'] = 'off'
akan memicu jalur HTTPS. Sepertinya itu tidak benar. Di sisi lain, saya pikir logika orisinal juga tidak benar.sumber
Berikut adalah dasar dari versi yang lebih aman dari jawaban yang diterima, menggunakan fungsi filter_input PHP , yang juga menggantikan kekurangan potensial
$_SERVER['REQUEST_URI']
:Anda dapat menggunakan beberapa filter berbeda untuk menyesuaikannya sesuai keinginan Anda.
sumber
Anda dapat menggunakan
HTTP_ORIGIN
seperti yang diilustrasikan dalam cuplikan di bawah ini:sumber
Penggunaan yang sangat sederhana:
sumber
Saya pikir metode ini bagus .. coba saja
sumber
Ini berfungsi untuk HTTP dan HTTPS.
Keluarkan sesuatu seperti ini.
sumber
Untuk lebih lanjut: Cara mendapatkan URL lengkap dari suatu halaman menggunakan PHP
sumber