Mari lihat beberapa soalan di bawah:
1. Bagaimana untuk mendayakan mod_rewrite pada Apache?
2. Sedikit teori. Cara mod_rewrite berfungsi.
3. Contoh mudah.
4. Apakah yang perlu dilakukan dalam skrip?
5. Apakah yang memberikan pendekatan ini dan mod_rewrite secara umum?
6. Kemungkinan ralat.
7. Alma Mater untuk belajar mod_rewrite
1. Bagaimana untuk mendayakan mod_rewrite pada Apache?
Untuk mendayakan mod_rewrite pada pelayan web Apache, anda perlu mengedit fail httpd.conf.
Untuk melakukan ini, buka fail httpd.conf, cari baris:
Kod itu |
#LoadModule rewrite_module modules/mod_rewrite.so |
Dan keluarkan komen
Kod itu |
LoadModule rewrite_module modules/mod_rewrite.so |
Kemudian kita mulakan semula pelayan web.
2. Sedikit teori. Cara mod_rewrite berfungsi.
Sebagai peraturan, pengaturcara yang baru sahaja menemui mod_rewrite tidak memahami sepenuhnya cara mekanisme ini berfungsi. Kerana ini, untuk masa yang lama mereka berteka-teki tentang "kesilapan kebudak-budakan.
Jadi. Seperti yang kita tahu, terdapat permintaan GET yang dipanggil, i.e. http://example.com/2005/12/31/theme.html , yang "datang" ke pelayan web (dalam contoh kami, Apache). Apa yang pelayan lakukan. Pertama sekali, dia melihat tetapan hos ini. Kemudian dia memutuskan apa yang perlu dilakukan seterusnya. Sama ada hantar semula kandungan halaman utama (index.html, contohnya) kepada pengguna, atau hantar kod skrip pengepala index.php untuk tafsiran, atau kembalikan ralat 404, dsb. dll. Mari kita anggap bahawa kita akan terus bekerja dengan index.phtml. Apa yang akan berlaku seterusnya, anda mungkin sudah tahu. Kami akan memberi tumpuan pada saat pelayan melihat tetapan hos. Mungkin terdapat sejumlah besar daripada mereka. Tetapi tanpa gagal, pelayan cuba mencari fail .htaccess dalam akar. (Fail konfigurasi Apache dengan cepat). Dalam fail ini terdapat peraturan transformasi mod_rewrite (ia juga boleh didapati dalam httpd.conf). Itu. Saya terus mengatakan bahawa penukaran URL dilakukan SEBELUM skrip berfungsi.
Algoritmanya adalah seperti berikut:
1. Pelayan menerima permintaan GET: http://example.com/2005/12/31/theme.html
2. Cari peraturan transformasi mod_rewrite dalam .htaccess.
3. Berubah.
4. Ubah hala ke index.phtml mengikut peraturan penukaran.
5. Skrip mula berfungsi.
3. Contoh mudah.
Ramai daripada anda telah melihat perkara ini: http://example.com/2005/12/31/theme.html . Alamat sedemikian sering digunakan oleh laman berita. Sememangnya, mereka tidak mempunyai semua folder dan fail html ini. Semua data diproses oleh skrip. Di bawah ini kami mempertimbangkan salah satu pilihan untuk transformasi sedemikian. Saya akan memberitahu anda segera. Terdapat banyak pilihan, saya hanya mengambil satu kes tertentu, yang saya sendiri gunakan dan menganggapnya paling universal.
Kod itu |
Tulis semula Enjin hidup Pilihan +FollowSymlinks RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule ^(.*)$ index.phtml |
Mari kita pertimbangkan semuanya mengikut urutan.
Dua RewriteCond berturut-turut ialah syarat di antaranya terdapat DAN.
Itu. Jika alamat yang diminta bukan fail atau direktori sebenar, ubah hala ke index.phtml. Itu. oleh itu, kami menyedari bahawa permintaan kami untuk http://example.com/2005/12/31/theme.html akan diproses oleh skrip index.phtml. Kini keseluruhan persoalannya ialah bagaimana kita mengetahui dalam skrip yang diminta pengguna /2005/12/31/theme.html.
Terdapat kelainan lirik di sini. Beberapa perkataan tentang RewrtiterRule. Arahan mempertimbangkan parameter. Yang pertama (dalam kes kami: ^(.*)$) ialah rentetan ungkapan biasa yang menyemak sama ada alamat yang diminta (dalam kes kami: /2005/12/31/theme.html) sepadan dengan corak (dalam kes kami, ya, iaitu j. corak berkata: "sebarang aksara 0 atau lebih kali" dari awal hingga akhir rentetan - ^(.*)$). Jika corak berpuas hati, mod_rewrite mengubah hala permintaan ke fail yang dinyatakan dalam parameter kedua (dalam kes kami: index.phtml).
Kini keseluruhan persoalannya ialah bagaimana skrip mengetahui tentang "/2005/12/31/theme.html". Terdapat dua pilihan.
pertama:
Kod itu |
RewriteRule ^(.*)$ index.phtml?$1 [L] |
Di mana "/2005/12/31/theme.html" akan dihantar ke skrip index.phtml dalam pembolehubah QUERY_STRING, kerana $1 ialah kurungan pertama dalam corak, yang bersamaan dengan: http://example.com/?/2005/12/31/theme.html . Tetapi, adakah anda pernah melihat ini di mana-mana? Tidak. Oleh itu, kami menggunakan QSA sebagai kunci.
Terdapat pembolehubah pelayan (yang mana skrip mempunyai akses) REQUEST_URI yang sentiasa mengandungi permintaan GET ("/2005/12/31/theme.html"). Jadi, jika kita mengubah hala ke index.phtml, maka REQUEST_URI sepatutnya mendapat nilai index.phtml, TETAPI kunci QSA menggantikannya dengan "/2005/12/31/theme.html". Itu. kami mengubah hala secara fizikal ke index.phtml dan secara logik menunjukkan skrip yang diakses oleh pengguna "/2005/12/31/theme.html".
4. Membuat skrip
Kami kini bekerja dengan index.phtml, skrip yang kami ubah hala. Saya katakan dengan segera, kod itu dalam PHP, kerana Saya tidak mahir dalam bahasa lain untuk web.
Semudah itu. Kini anda boleh beroperasi pada tatasusunan ini. Untuk menjadikannya lebih jelas. Saya akan berikan anda satu analogi. Katakan URLnya ialah: http://example.com/index.phtml?year=2005&m...y=31&news=theme . Seperti yang kita ketahui, dalam skrip, parameter ini akan tersedia melalui tatasusunan $_GET.
jadi, $_GET['tahun'] sama dengan $arr, $_GET['bulan'] sama dengan $arr, $_GET['hari'] sama dengan $arr, $_GET ['tema' ] adalah sama dengan $arr (hanya perlu memotong ".html" juga).
5. Apakah yang memberikan pendekatan ini dan mod_rewrite secara umum?
Pertama, untuk enjin carian, URL seperti: http://example.com/?/2005/12/31/theme.html adalah lebih menyenangkan daripada http://example.com/index.phtml?year=2005&m. .. y=31&news=theme , dan untuk pengguna, anda juga akan bersetuju.
Detik kedua. Dengan mod_rewrite, kemungkinan serangan XSS secara praktikal dihapuskan, kerana include bug boleh dikatakan bertindih. Dalam contoh ini, ini tidak begitu kelihatan, tetapi ambil kata saya untuk itu, ia adalah. Tetapi dalam apa jua keadaan, semuanya bergantung pada kepala anda!!!
Perkara ketiga ialah menyembunyikan teknologi yang sebenarnya digunakan. ini sebahagiannya merumitkan penggodaman tapak, tetapi ini hanya had atas, seperti lumpur di kolam bertakung.
6. Kemungkinan ralat
Biasanya, ralat berikut mungkin berlaku:
404 - Dokumen tidak ditemui. Punca: Peraturan RewriteRule tidak menyala.
403 - Dilarang - akses ditolak. Peraturan penulisan semula mengandungi ralat logik yang berlaku kerana percubaan untuk mengubah hala ke fail yang tiada akses (/index.php - ia akan memberikan ini dengan tepat, kerana / dalam sistem UNIX bermaksud laluan dari direktori akar SERVER, di mana anda secara semula jadi tidak mempunyai akses).
500 – Ralat Pelayan Dalaman. Sebabnya ialah ralat sintaks dalam fail .htaccess.
7. Alma Mater untuk belajar mod_rewrite
Secara peribadi, artikel ini banyak membantu saya. Berikut adalah abstraknya, dan di bawah saya melampirkan fail ZIP. Ia mengandungi artikel ini dalam format RTF,
petikan |
"Kelebihan utama yang diberikan oleh mod_rewrite kepada anda ialah kebolehkonfigurasian dan fleksibiliti yang wujud dalam Sendmail. Kelemahan mod_rewrite ialah kebolehkonfigurasian dan fleksibiliti yang wujud dalam Sendmail." Brian Behlendorf Kumpulan Apache Brian Moore Selamat datang ke dunia mod_rewrite, pisau swiss penulisan semula URL! Modul ini beroperasi pada URL penuh (termasuk maklumat laluan) dalam konteks pelayan (httpd.conf) dan konteks direktori (.htaccess) malah boleh menjana bahagian rentetan pertanyaan sebagai hasilnya. Hasil yang ditukar mungkin menyebabkan permintaan diproses secara dalaman, diubah hala secara luaran, atau malah melalui modul proksi dalaman. Walau bagaimanapun, semua fungsi dan fleksibiliti ini datang dengan kelemahan: kerumitan. Jadi jangan harap untuk memahami keseluruhan modul ini dalam satu hari. Ralf S. Engelchall |
penting:
Sokongan fail ".htaccess" hanya tersedia pada pengehosan Linux. Pada fungsi pengehosan Windows ".htaccess" melaksanakan fail web.config.
Modul sokongan ".htaccess" tersedia pada semua rancangan pengehosan bersama berdasarkan OS Linux. Jika anda menerima mesej yang mengatakan bahawa tiada sokongan semasa memasang CMS ".htaccess" abaikan sahaja.
Jika anda menyediakan pelayan web Apache tetapi tidak mempunyai .htaccess, cipta dan tulis arahan yang diperlukan.
Untuk mencipta .htaccess, masukkan panel kawalan pengehosan mengikut arahan: Letakkan fail .htaccess dalam direktori tapak menggunakan artikel: .
Jika anda secara tidak sengaja memadam fail .htaccess, pulihkan ia. Atau tambahkan fail standard .htaccess untuk CMS anda:
Untuk melihat fail tersembunyi (bermula dengan titik) dalam cPanel, ikut langkah berikut:
Modul "mod_rewrite" hadir pada semua pelan pengehosan Linux. Untuk mengaktifkan "mod_rewrite" tambah pada fail .htaccess garis pandangan.
Dalam tutorial ini, kita akan belajar cara mengurus penulisan semula URL menggunakan Apache 2 dan modul mod_rewrite. Modul ini membolehkan anda menulis semula URL dengan cara yang lebih bersih, menterjemah laluan yang boleh dibaca manusia ke dalam rentetan pertanyaan mesra kod atau mengubah hala URL berdasarkan syarat tambahan.
Panduan ini terbahagi kepada dua bahagian. Yang pertama memasang tapak web sampel dan menunjukkan contoh penulisan semula yang mudah. Bahagian kedua mengandungi dua lagi contoh yang lebih mendalam tentang peraturan penulisan semula yang biasa digunakan.
Mengikuti panduan ini, anda perlu:
Pertama, kita perlu mendayakan mod_rewrite . Ia tersedia tetapi tidak disertakan dengan pemasangan bersih Apache 2.
Sudo a2enmod tulis semula
Ia mengaktifkan modul atau memberi amaran kepada anda bahawa modul sudah didayakan. Mulakan semula Apache untuk perubahan berkuat kuasa.
mod_rewrite kini didayakan sepenuhnya. Dalam langkah seterusnya, kami akan mencipta fail .htaccess yang akan kami gunakan untuk menentukan peraturan penulisan semula untuk ubah hala.
Fail .htaccess membolehkan kami mengubah suai peraturan penulisan semula kami tanpa mengakses fail konfigurasi pelayan. Atas sebab ini, .htaccess adalah penting untuk keselamatan aplikasi web anda. Tempoh yang mendahului nama fail memastikan fail itu tersembunyi.
Catatan
Sebarang peraturan yang anda letakkan dalam fail .htaccess juga boleh diletakkan terus dalam fail konfigurasi pelayan. Malah, dokumentasi Apache rasmi mengesyorkan menggunakan fail konfigurasi pelayan dan bukannya .htaccess kerana Apache memprosesnya dengan lebih pantas.
Walau bagaimanapun, dalam contoh mudah ini, keuntungan prestasi akan diabaikan. Selain itu, menetapkan peraturan .htaccess adalah berguna, terutamanya dengan berbilang tapak web pada pelayan yang sama. Ia tidak memerlukan permulaan semula pelayan untuk perubahan berkuat kuasa, dan ia tidak memerlukan keistimewaan superuser untuk mengedit peraturan ini, menjadikan penyelenggaraan dan perubahan mungkin daripada akaun bukan istimewa lebih mudah. Beberapa program sumber terbuka yang popular, seperti Joomla, sering bergantung pada fail .htaccess dalam perisian untuk mengubah suai dan mencipta peraturan tambahan atas permintaan.
Kami perlu memasang dan menjamin beberapa lagi tetapan sebelum kami boleh bermula.
Secara lalai, Apache tidak membenarkan penggunaan fail .htaccess untuk menguatkuasakan peraturan penulisan semula, jadi anda perlu membenarkan perubahan pada fail itu terlebih dahulu. Buka fail konfigurasi lalai Apache menggunakan nano atau editor teks kegemaran anda.
sudo nano /etc/apache2/sites-available/000-default.conf
Di dalam fail ini anda akan menemui blok
/etc/apache2/sites-available/000-default.conf
Simpan dan tutup fail. Mulakan semula Apache untuk perubahan berkuat kuasa.
sudo systemctl mulakan semula apache2
Sekarang buat fail .htaccess dalam direktori akar web anda.
Tambahkan baris ini di bahagian atas fail baharu untuk mendayakan penulisan ganti.
/var/www/html/.htaccess
Tulis semula Enjin hidup
Simpan fail dan keluar.
Anda kini mempunyai fail .htaccess langsung yang boleh anda gunakan untuk mengurus peraturan penghalaan aplikasi web anda. Dalam langkah seterusnya, kami akan mencipta fail tapak sampel yang akan kami gunakan untuk menunjukkan peraturan penulisan semula.
Di sini kami akan menyediakan penulisan semula URL asas yang menukar URL kepada laluan kod sebenar. Khususnya, kami akan membenarkan pengguna mengakses. http://your_server_ip /about
Mari mulakan dengan mencipta fail bernama about.html dalam direktori akar web.
Sudo nano /var/www/html/about.html
Salin kod HTML berikut ke dalam fail, kemudian simpan dan tutupnya.
/var/www/html/about.html
Anda boleh mengakses http://your_server_ip/about.html tetapi ambil perhatian bahawa jika anda cuba mengakses http://your_server_ip/about anda akan melihat ralat 404 Tidak Ditemui. Tetapi untuk membolehkan pengguna mengakses halaman menggunakan kira-kira dan bukannya menulis semula peraturan, fungsi ini akan membenarkannya.
RewriteRules mengikut format berikut:
Struktur umum RewriteRule
Penggantian corak RewriteRule
Buka fail .htaccess.
sudo nano /var/www/html/.htaccess
Selepas baris pertama, tambahkan RewriteRule yang ditandakan dengan warna merah dan simpan fail tersebut.
/var/www/html/.htaccess
RewriteEngine pada RewriteRule ^about$ about.html
Dalam kes ini, ^about$ ialah templat, about.html ialah pengganti dan ialah bendera. Contoh kami menggunakan beberapa aksara dengan makna istimewa:
Sekarang, anda sepatutnya boleh mengakses http://your_server_ip/about dalam penyemak imbas anda. Malah, dengan peraturan yang ditunjukkan di atas, URL berikut akan menunjuk ke about.html:
Di bawah tidak akan menjadi:
Anda kini mempunyai fail .htaccess langsung dengan peraturan mudah yang anda boleh ubah suai dan lanjutkan untuk memenuhi keperluan anda. Dalam bahagian berikut, kami akan menunjukkan dua contoh tambahan arahan yang paling biasa digunakan.
Aplikasi web sering digunakan rentetan pertanyaan, yang ditambahkan pada URL menggunakan tanda soal (?) selepas alamat. Parameter individu dipisahkan oleh ampersand (&). Rentetan pertanyaan boleh digunakan untuk menghantar data tambahan antara halaman aplikasi individu.
Sebagai contoh, halaman hasil carian yang ditulis dalam PHP mungkin menggunakan URL seperti http://example.ru/results.php?item=shirt&author=andreyex . Dalam contoh ini, dua parameter tambahan melepasi hasil khayalan.php skrip aplikasi: item dengan nilai baju dan pengarang dengan nilai andreyex . Aplikasi boleh menggunakan maklumat rentetan pertanyaan untuk membina halaman yang betul untuk pelawat.
Peraturan penulisan semula Apache sering digunakan untuk memudahkan pautan yang panjang dan tidak sedap dipandang seperti di atas URL mesra, yang lebih mudah untuk menaip dan mentafsir secara visual. Dalam contoh ini, kami ingin memudahkan pautan di atas untuk membuat http://example.ru/shirt/andreyex . shirt dan nilai pengarang dan parameter andreyex ke alamat yang sama, tetapi tanpa rentetan pertanyaan dan nama skrip.
Berikut adalah satu peraturan untuk melaksanakan ini:
Contoh mudah
RewriteRule ^shirt/andreyex$ results.php?item=shirt&author=andreyex
shirt/andreyex secara eksplisit dipadankan dalam alamat yang diminta dan Apache diberitahu untuk menjalankan results.php?item=shirt&author=andreyex sebaliknya.
bendera biasanya digunakan dalam peraturan penulisan semula[. Mereka memberitahu Apache untuk menambah sebarang rentetan pertanyaan tambahan pada URL yang disediakan. Tanpa ini, rentetan pertanyaan tambahan akan dibuang. http://example.ru/shirt/andreyex?page=2 results.php?item=shirt&author=andreyex&page=2
Walaupun kaedah ini mencapai kesan yang diingini, kedua-dua nama elemen dan pengarang dikodkan keras ke dalam peraturan. Ini bermakna peraturan itu tidak akan berfungsi untuk mana-mana item lain seperti seluar atau pengarang seperti pemusnah.
Untuk menjadikan peraturan lebih umum, kita boleh menggunakan ungkapan biasa untuk memadankan sebahagian daripada alamat asal dan menggunakan bahagian tersebut dalam skema penggantian. Peraturan yang diubah suai akan kelihatan seperti ini:
Contoh mudah
RewriteRule ^(+)/(andreyex|pemusnah|jatuh|musim bunga) results.php?item=$1&author=$2
Ungkapan biasa pertama kumpulan dalam kurungan sepadan dengan rentetan yang mengandungi aksara dan nombor abjad angka, seperti baju atau seluar, dan menyimpan serpihan yang dipadankan sebagai pembolehubah $1 . Kumpulan kedua ungkapan dalam kurungan sepadan dengan tepat andreyex , pemusnah , musim luruh atau musim bunga dan juga menyimpan serpihan yang dipadankan sebagai $2 .
Coretan yang dipadankan kemudiannya berada dalam URL yang terhasil ke dalam pembolehubah item dan pengarang dan bukannya baju berkod keras dan andreyex yang kami gunakan sebelum ini.
Perkara di atas akan menukar, sebagai contoh, http://example.ru/pants/andreyex kepada http://example.ru/results.php?item=pants&author=andreyex . Contoh ini juga untuk masa hadapan, membenarkan berbilang elemen dan pengarang ditulis semula dengan betul menggunakan satu peraturan.
Peraturan penulisan semula tidak semestinya sentiasa dinilai satu demi satu tanpa sebarang sekatan. Arahan RewriteCond membolehkan kami menambah syarat pada peraturan penulisan semula kami untuk mengawal apabila peraturan diproses. RewriteConds mengikut format berikut:
Struktur umum RewriteCond
Keadaan RewriteCond TestString
Jika RewriteCond adalah benar, maka RewriteRule serta-merta selepas itu akan dipertimbangkan. Jika tidak, maka peraturan itu akan digugurkan. Berbilang RewriteCond boleh digunakan satu demi satu, dan dengan kelakuan lalai, mereka semua perlu menilai kepada benar dan dalam peraturan seterusnya untuk dipertimbangkan.
Sebagai contoh, katakan anda ingin mengubah hala semua permintaan untuk fail dan direktori yang tidak wujud di tapak anda kembali ke halaman utama dan bukannya menunjukkan halaman ralat standard. 404 Tidak Ditemui. Ini boleh dicapai dengan syarat peraturan berikut:
Ubah hala semua permintaan untuk fail dan direktori yang tidak wujud ke halaman utama
RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule . /
Memandangkan perkara di atas:
RewriteRule pada baris terakhir hanya akan berkuat kuasa untuk permintaan untuk fail dan direktori yang tidak wujud. RewriteRule itu sendiri sangat mudah dan mengubah hala setiap permintaan ke /root tapak.
mod_rewrite ialah modul Apache berguna yang boleh digunakan dengan berkesan untuk menyediakan URL yang boleh dibaca manusia. Dalam pelajaran ini, anda mempelajari cara menggunakan arahan RewriteRule untuk mengubah hala URL, termasuk daripada rentetan pertanyaan. Anda juga mempelajari tentang pengalihan URL menggunakan arahan RewriteCond.
Fikirkan kembali lawatan terakhir anda ke kedai dalam talian. Apabila anda menemui produk yang betul, anda mungkin melihat sesuatu seperti URL ini:
Ini bukan kerana pembangun tapak ini menghabiskan banyak masa untuk menyediakan direktori berasingan untuk kategori produk yang berbeza, tetapi terima kasih kepada modul berguna yang dipanggil mod_rewrite. Modul ini membolehkan anda membuat URL tersuai dan dipermudahkan. URL sebenarnya kelihatan seperti ini:
http://www.buy-online.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?
Tutorial ini meliputi mendayakan modul ini, mencipta dan menggunakan halaman .htaccess dan menyediakan penulisan semula URL.
Juga, anda perlu memasang apache terlebih dahulu. Untuk memasang pelayan web ini dengan cepat pada Ubuntu, gunakan arahan:
sudo apt-get install apache2
Mula-mula anda perlu mendayakan mod_rewrite, ia sangat mudah:
sudo a2enmod tulis semula
Perintah ini akan mendayakan modul, atau memaparkan mesej "Tulis semula modul sudah didayakan" jika modul sudah didayakan.
Setelah modul telah diaktifkan, anda boleh menyediakan penulisan semula pautan dengan mencipta fail .htaccess dalam direktori tapak.
Fail .htaccess ialah cara untuk memperhalusi tapak tanpa perlu menukar fail konfigurasi pelayan. Titik yang memulakan nama fail bermakna fail itu tersembunyi.
Selain itu, lokasi fail .htaccess adalah penting, kerana tetapan fail ini akan mempengaruhi semua fail dan subdirektori direktori di mana ia berada.
Anda boleh mencipta fail .htaccess menggunakan editor teks, dan kemudian memuat naiknya ke tapak menggunakan klien ftp.
catatan: fail mesti dinamakan tepat .htaccess; Nama fail tidak boleh mengandungi sambungan tambahan.
Sebagai alternatif, anda boleh mencipta fail .htaccess melalui terminal menggunakan arahan ini, menggantikan example.com dengan nama domain tapak.
Untuk membenarkan fail .htaccess mengatasi tetapan tapak lalai, buka fail konfigurasi.
Catatan: Ini memerlukan keistimewaan sudo yang dilanjutkan.
sudo nano /etc/apache2/sites-available/default
Dalam fail ini, cari bahagian berikut dan tukar nilai baris AllowOverride (gantikan Tiada dengan Semua). Akibatnya, bahagian akan kelihatan seperti ini:
Indeks Pilihan FollowSymLinks MultiViews
AllowOverride Semua
perintah benarkan, tolak
izinkan dari semua
Selepas menyimpan perubahan dan menutup fail, mulakan semula pelayan apache. Fail .htacess kini tersedia untuk semua tapak pada pelayan.
sudo service apache2 restart
Kini anda sudah bersedia untuk menulis semula URL tapak.
Keseluruhan operasi penulisan semula URL berlaku dalam fail .htaccess. Secara umum, semua arahan penulisan semula URL mengikut corak yang sama:
Penggantian Corak RewriteRule
Pilihan yang digunakan dalam arahan ini:
Ini ialah contoh paling mudah penulisan semula URL: pelawat tapak memasukkan satu URL ke dalam penyemak imbas tetapi diubah hala ke yang lain. Untuk mengkonfigurasi tingkah laku ini, ikut arahan dalam bahagian ini.
Untuk bermula, buat dua halaman tapak web; contohnya, yang pertama ialah tentang epal (apples.html) dan yang kedua ialah tentang oren (oranges.html).
Salin kod ini:
Kemudian buat halaman kedua (dalam kes ini, halaman oren). Untuk melakukan ini, cuma gantikan Apple dalam blok kod ini dengan Oren.
Kemudian buka fail .htaccess:
sudo nano /var/www/example.com/.htaccess
Masukkan arahan tulis semula URL berikut ke dalamnya:
Tulis semula Enjin hidup
RewriteRule ^oranges.html$ apples.html
Simpan dan tutup fail.
Kemudian lawati halaman /oranges.html, ia akan mengandungi maklumat halaman /apples.html.
Mari kita lihat dengan lebih dekat arahan di atas:
Semak url:
http://example.com/results.php?products=apple
Ia akan menjadi lebih jelas sebagai:
http://example.com/products/apple
Untuk melakukan ini, tambahkan baris berikut pada .htaccess:
Tulis semula Enjin hidup
RewriteRule ^products/(+)/?$results.php?products=$1
Baris ini terdiri daripada pilihan berikut:
Ciri ini amat diperlukan jika URL tapak terlalu panjang atau kompleks.
Sebagai contoh, ambil URL berikut:
http://example.com/results.php?products=produce&type=fruit&species=apple
http://example.com/produce/fruit/apple
Untuk melakukan ini, tambahkan baris berikut pada .htaccess (by the way, .htaccess boleh mengandungi nombor tanpa had bahagian tersebut):
Tulis semula Enjin hidup
RewriteRule ^(daging|hasilkan|dairy)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&spesies=$3
Mari kita lihat lebih dekat pada kod ini:
Sambungan artikel boleh didapati.
Tag: ,Panduan ini akan membantu anda menyediakan penulisan semula URL pada Apache2 menggunakan modul mod_rewrite. Alat ini membolehkan anda menulis semula URL dan membuat pautan bersih dengan menukar laluan kompleks kepada pautan yang jelas dan boleh dibaca.
Apache boleh dipasang menggunakan pengurus pakej apt-get.
Mula-mula anda perlu mengemas kini indeks pakej:
sudo apt-get kemas kini
Apache ialah pelayan web modular yang popular (iaitu, ia membolehkan anda menyesuaikan ciri dengan mendayakan dan melumpuhkan modul). Untuk memasang Apache 2, taip:
sudo apt-get install apache2
Pelayan Apache berjaya dipasang.
Sekarang kita perlu fokus pada modul.
Untuk mendayakan mod_rewrite, taip:
sudo a2enmod tulis semula
Perintah akan membolehkan modul dan memberitahu anda bahawa modul sedang berjalan. Untuk mengemas kini tetapan pelayan web, mulakan semula:
sudo service apache2 restart
Sekarang kita perlu menulis fail .htaccess yang akan menguruskan penulisan semula.
Fail .htaccess mentakrifkan arahan Apache individu untuk setiap domain individu.
Catatan: Di Linux, nama fail tersembunyi bermula dengan titik.
Mula-mula anda perlu mendayakan sokongan untuk fail .htaccess. Untuk melakukan ini, edit arahan AllowOverride dalam fail konfigurasi Apache. Buka fail:
sudo nano /etc/apache2/sites-enabled/000-default.conf
Cari blok
etc/apache2/sites-available/default
Indeks Pilihan FollowSymLinks MultiViews
AllowOverride Semua
perintah benarkan, tolak
izinkan dari semua
Sekarang fail konfigurasi pelayan web sepatutnya kelihatan seperti ini:
/etc/apache2/sites-available/default
. . .
. . .
Untuk mengemas kini tetapan, mulakan semula Apache.
sudo service apache2 restart
Buat fail .htaccess:
Tambahkan baris ini pada permulaan fail baharu untuk mengaktifkan RewriteEngine:
Tulis semula Enjin hidup
Simpan dan tutup fail. Ini akan membolehkan Apache memproses peraturan penulisan semula.
Pengguna lain sepatutnya hanya mempunyai akses baca kepada .htaccess. Tukar kebenaran fail:
sudo chmod 644 /var/www/html/.htaccess
Bahagian ini akan menunjukkan kepada anda cara menyediakan penulisan semula URL asas. Pautan example.com/about digunakan sebagai contoh.
Buat fail about.html:
sudo nano /var/www/html/about.html
Salin kod berikut dan letakkan dalam fail:
Ambil perhatian bahawa hanya about.html boleh diakses. Jika anda memasukkan pautan server_ip_address /about, anda akan mendapat ralat 404 Not Found. Buat peraturan tulis semula untuk membetulkannya.
Buka fail .htaccess:
sudo nano /var/www/html/.htaccess
Tambahkan baris berikut padanya:
RewriteRule ^about$ about.html
Fail kini mengandungi tetapan berikut:
Tulis semula Enjin hidup
RewriteRule ^about$ about.html
Penyemak imbas kini sepatutnya dapat menyediakan halaman example.com/about.
Menggunakan peraturan ini sebagai contoh, kita boleh mempertimbangkan sintaks umum penulisan semula.
Mengikut peraturan ini, halaman boleh diakses melalui pautan berikut:
example.com/about
example.com/Perihal
example.com/about.html
example.com/about/
example.com/contact
Jadi sekarang anda tahu asas menulis peraturan menulis semula. Mari kita lihat dua contoh tambahan.
Catatan: Untuk ujian, anda boleh membuat beberapa fail tambahan.
Peraturan RewriteRule mempunyai format berikut:
Penggantian corak RewriteRule
Aplikasi sering menggunakan rentetan pertanyaan. Rentetan ini berada dalam URL, bermula dengan tanda soal (?) dan berakhir dengan ampersand (&). Apabila memproses peraturan penulisan semula, Apache mengabaikan kedua-dua aksara ini. Sebagai contoh, URL halaman hasil carian yang ditulis dalam PHP mungkin kelihatan seperti ini:
http://example.com/results.php?item=shirt&season=summer
Sudah tentu, pengguna akan lebih selesa jika pautan itu bersih:
http://example.com/shirt/summer
Ini boleh dicapai dalam dua cara: dengan penggantian mudah atau pengelompokan parameter.
Buat peraturan yang melakukan penggantian mudah untuk menjadikan pautan bersih:
RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer
Peraturan ini akan menggunakan baju/musim panas dan bukannya hasil.php?item=shirt&season=summer.
Dalam sesetengah situasi, anda perlu mengoptimumkan rentetan pertanyaan (contohnya, untuk memasukkan semua musim). Untuk ini anda perlukan:
Ini akan menghasilkan peraturan berikut:
RewriteRule ^kemeja/(musim panas|musim sejuk|musim luruh|musim bunga) results.php?item=shirt&season=$1
Peraturan ini menambahkan segmen baharu pada URL.
Untuk membolehkan pengguna membuka URL bersih mana-mana bahagian tapak (bukan sahaja / baju), anda perlu:
RewriteRule ^(+)/(musim panas|musim sejuk|musim luruh|musim bunga) keputusan.php?item=$1&season=$2
http://example.com/results.php?item=pants&season=summer
http://example.com/pants/summer
Ini akan membolehkan anda menghapuskan beberapa masalah yang berpotensi. Cuba tukar:
http://example.com/pants/summer?page=2
http://example.com/results.php?item=pants&season=summer&page=2
Dengan tetapan semasa, anda tidak akan dapat menavigasi ke halaman=2. Ini boleh diperbaiki dengan bendera QSA, yang membolehkan rentetan pertanyaan digabungkan. Edit peraturan seperti berikut:
RewriteRule ^(+)/(musim panas|musim sejuk|musim luruh|musim bunga) keputusan.php?item=$1&season=$2
Sekarang mari kita lihat dengan lebih dekat arahan RewriteCond. RewriteCond mempunyai format berikut:
Keadaan RewriteCond TestString
Jika RewriteCond adalah benar, Apache akan memproses RewriteRule berikut.
Anda melihat lebih awal bahawa jika halaman yang diminta tidak wujud, Apache mengembalikan halaman ralat 404 Not Found. Walau bagaimanapun, Apache sebaliknya boleh mengubah hala semua permintaan tersebut ke halaman utama. Tambahkan syarat berikut untuk memastikan fail yang diminta wujud:
RewriteCond %(REQUEST_FILENAME) !-f
RewriteRule ^admin/(.*)$ /admin/home
Pertimbangkan peraturan di atas dalam bahagian:
Anda juga boleh menetapkan ErrorDocument yang mana semua permintaan untuk halaman yang tidak wujud akan dihantar. Buat peraturan ErrorDocument dan ubah hala semua 404 ralat ke halaman error.html:
ErrorDocument 404 /error.html
RewriteCond membolehkan anda menyekat akses ke tapak dengan alamat IP.
Sebagai contoh, peraturan ini akan menyekat semua trafik kecuali 12.34.56.789:
RewriteCond %(REMOTE_ADDR) !^(12\.34\.56\.789)$
RewriteRule(.*) -
kayabaparts.ru - Dewan masuk, dapur, ruang tamu. Taman. kerusi. Bilik tidur