Saya memiliki URL yang mirip:
url.com/picture.php?id=51
Bagaimana saya akan mengubah URL itu menjadi:
picture.php/Some-text-goes-here/51
Saya pikir WordPress melakukan hal yang sama.
Bagaimana cara membuat URL yang ramah di PHP?
php
.htaccess
url
mod-rewrite
url-rewriting
Jazerix
sumber
sumber
mod_rewrite
adalah semua yang Anda butuhkan untuk ini dan ada banyak pertanyaan mengenai hal itu di SO. Dan jika Anda "berpikir" bahwa wordpress melakukan hal yang sama, mengapa Anda tidak mencarinya saja ? ;)Jawaban:
Anda pada dasarnya dapat melakukan 2 cara ini:
Rute .htaccess dengan mod_rewrite
Tambahkan file yang disebut
.htaccess
di folder root Anda, dan tambahkan sesuatu seperti ini:Ini akan memberi tahu Apache untuk mengaktifkan mod_rewrite untuk folder ini, dan jika ditanya URL yang cocok dengan ekspresi reguler, ia menulis ulang secara internal untuk apa yang Anda inginkan, tanpa pengguna akhir melihatnya. Mudah, tetapi tidak fleksibel, jadi jika Anda membutuhkan lebih banyak daya:
Rute PHP
Letakkan yang berikut ini di .htaccess Anda sebagai gantinya: (perhatikan slash utama)
Ini akan memerintahkannya untuk menjalankan
index.php
semua file yang biasanya tidak dapat ditemukan di situs Anda. Di sana Anda dapat misalnya:Ini adalah cara situs besar dan sistem CMS melakukannya, karena memungkinkan fleksibilitas yang lebih besar dalam penguraian URL, konfigurasi, dan URL yang bergantung pada database, dll
.htaccess
.sumber
picture.php/invalid-text/51
juga akan mengarahkan ulang ke lokasi yang sama. Anda juga bisa menambahkan tanda centang untuk melihat apakah string sudah benar dan jika tidak, arahkan lagi ke lokasi yang benar. Begitulah cara saya melakukannya di salah satu situs saya menggunakan htaccess./blog/25
serta/picture/51
dan/download/684
. Juga, itu dianggap praktik yang sangat buruk (dan membuat Anda PR Google dihukum!) Jika tidak semua URL yang dihasilkan secara acak mengembalikan 404.FallbackResource /index.php
(perhatikan slash terkemuka)FallbackResource
hanya tendangan untuk file yang tidak benar-benar ada di sistem file, maka mundur . Jadi jika Anda memiliki file/static/styles.css
dan merujuknya sebagaihttp://mydomain.tld/static/styles.css
kode tidak pernah dieksekusi, membuatnya berfungsi seperti yang diharapkan dan dimaksudkan secara transparan.if($elements[0] === NULL)
sebagai gantinya, karena$elements
masih akan mengembalikan hitungan satu, bahkan jika itu kosong.Jika Anda hanya ingin mengubah rute untuk
picture.php
kemudian menambahkan aturan penulisan ulang.htaccess
akan melayani kebutuhan Anda, tetapi, jika Anda ingin URL menulis ulang seperti di Wordpress maka PHP adalah caranya. Ini adalah contoh sederhana untuk memulai.Struktur folder
Ada dua file yang diperlukan di folder root,
.htaccess
danindex.php
, dan akan lebih baik untuk meletakkan sisa.php
file di folder terpisah, sepertiinc/
..htaccess
File ini memiliki empat arahan:
RewriteEngine
- aktifkan mesin penulisan ulangRewriteRule
- menolak akses ke semua file dalaminc/
folder, mengalihkan semua panggilan ke folder itu keindex.php
RewriteCond
- memungkinkan akses langsung ke semua file lain (seperti gambar, css atau skrip)RewriteRule
- redirect apa pun keindex.php
index.php
Karena semuanya sekarang dialihkan ke index.php, akan ditentukan apakah urlnya benar, semua parameter ada, dan jika jenis parameternya benar.
Untuk menguji url kita perlu memiliki seperangkat aturan, dan alat terbaik untuk itu adalah ekspresi reguler. Dengan menggunakan ekspresi reguler, kami akan membunuh dua lalat dengan satu pukulan. Url, untuk lulus tes ini harus memiliki semua parameter yang diperlukan yang diuji pada karakter yang diizinkan. Berikut ini beberapa contoh aturan.
Selanjutnya adalah menyiapkan permintaan uri.
Sekarang setelah kami memiliki permintaan uri, langkah terakhir adalah menguji uri pada aturan ekspresi reguler.
Pertandingan yang berhasil akan, karena kami menggunakan subpatterns bernama di regex, mengisi
$params
array hampir sama dengan PHP mengisi$_GET
array. Namun, saat menggunakan url dinamis,$_GET
array diisi tanpa parameter apa pun.Beberapa baris kode ini dan pengetahuan dasar tentang ekspresi reguler sudah cukup untuk mulai membangun sistem perutean yang solid.
Sumber lengkap
sumber
ini adalah file .htaccess yang meneruskan hampir semua ke index.php
maka terserah Anda parse $ _SERVER ["REQUEST_URI"] dan rutekan ke picture.php atau apa pun
sumber
FallbackResource
arahan beberapa versi utama yang lalu, yang sekarang merupakan cara yang disukai untuk menerapkan perilaku ini dengan biaya kinerja yang lebih rendah karena tidak perlu meluncurkan seluruh mesin penulisan ulang. Dokumentasi di sini . Aturan Anda juga cacat karena Anda tidak mereferensikan direktori (!-d
) dan semua filter ekstensi sudah usang - yang-f
seharusnya sudah menangkap mereka.PHP bukan yang Anda cari, lihat mod_rewrite
sumber
Meskipun sudah dijawab, dan maksud penulis adalah membuat aplikasi tipe front controller, tetapi saya memposting aturan literal untuk masalah yang diajukan. jika seseorang memiliki masalah yang sama.
Di atas harus berfungsi untuk url
picture.php/Some-text-goes-here/51
. tanpa menggunakan index.php sebagai aplikasi pengalihan.sumber