Rewrite dan .htaccess: Perbezaan dan Perhatian Semasa Migrasi Dari NGINX & Apache ke Caddy Dalam ServBay
Maklumat Latar Belakang
URL Rewrite (kebiasaannya disebut sebagai Rewrite atau Penulisan Semula URL), juga dikenali sebagai pseudo-static, ialah satu teknik untuk mengubah URL permintaan secara dinamik di lapisan pelayan web. Ia membolehkan URL asal yang diakses oleh pengguna atau enjin carian (contohnya /?page=123
) di-tulis semula secara dalaman kepada URL lain (contohnya /posts/123/
), namun pengguna masih melihat URL yang sudah ditulis semula di bar alamat pelayar. Teknik ini digunakan secara meluas untuk:
- Mencantikkan Struktur URL: Mewujudkan URL yang lebih mudah dibaca, diingati dan dikongsi.
- Meningkatkan SEO: Enjin carian lebih gemar URL yang deskriptif dan jelas strukturnya.
- Menyembunyikan Butiran Dalaman: Mengelakkan pendedahan laluan fail atau parameter kueri bagi tujuan keselamatan.
- Menormalisasi URL: Memaksa penggunaan format URL tertentu (contohnya www atau tanpa www, guna HTTPS).
- Pelaksanaan Routing: Sebilangan besar rangka kerja web moden menggunakan Rewrite untuk menghalakan semua permintaan ke fail masuk tunggal (seperti
index.php
) supaya rangka kerja ambil alih pemprosesan permintaan.
Memahami dan mengkonfigurasi peraturan Rewrite adalah satu kemahiran asas dalam pembangunan web.
Sokongan NGINX & Apache Dalam ServBay
ServBay hadir siap dengan sokongan penuh untuk NGINX dan Apache sebagai pelayan web. Pengguna boleh menukar pelayan web utama dengan mudah mengikut keperluan projek atau kecenderungan peribadi.
Untuk maklumat tentang penukaran pelayan web utama, sila rujuk: Bagaimana Menetapkan Pelayan Web Utama
ServBay menawarkan pelbagai pilihan pelayan web popular seperti Caddy, NGINX dan Apache kepada pembangun. Bagi memudahkan konfigurasi persekitaran pembangunan tempatan, ServBay telah menyediakan peraturan Rewrite sedia pakai untuk Caddy dan NGINX, memenuhi keperluan kebanyakan rangka kerja dan CMS web moden. Ini bermaksud untuk aplikasi-aplikasi biasa seperti WordPress berasaskan PHP, Laravel, Symfony dan lain-lain, anda biasanya boleh terus jalankan aplikasi pada ServBay tanpa perlu mengubah konfigurasi Rewrite – benar-benar sedia-guna.
Namun, bagi pembangun yang biasa menggunakan Apache atau NGINX serta mempertimbangkan atau sedang memindahkan laman web projek ke Caddy yang terbina dalam ServBay, memahami perbezaan konfigurasi peraturan Rewrite antara pelayan sangat penting. Dokumen ini menerangkan perbezaan utama antara Apache, NGINX dan Caddy dari segi Rewrite serta perkara perlu diperhatikan semasa proses migrasi.
Peraturan Rewrite Sedia-Guna: Kelebihan ServBay
Perhatian Penting
Salah satu matlamat utama reka bentuk ServBay ialah memudahkan pembinaan serta konfigurasi persekitaran pembangunan tempatan. Untuk kebanyakan aplikasi dan rangka kerja web utama, ServBay telah pun menyediakan konfigurasi peraturan Rewrite yang lengkap. Ini bermakna anda tidak perlu menulis atau mengubah peraturan Rewrite secara manual ketika menjalankan aplikasi-aplikasi tersebut di ServBay. Semua konfigurasi penting dan asas ini telah diuruskan oleh ServBay.
Jika anda memindahkan laman web yang sebelum ini berjalan di persekitaran Apache atau NGINX ke ServBay dengan Caddy, dan perlu menguruskan peraturan Rewrite khusus yang kompleks, sila rujuk panduan migrasi berikut:
Pengenalan Kepada Peraturan Rewrite Pelayan Web
Setiap pelayan web menggunakan sintaks dan struktur fail yang berbeza untuk konfigurasi peraturan Rewrite. Memahami perbezaan ini ialah asas penting semasa migrasi silang pelayan. Seksyen berikut menyenaraikan ulasan ringkas mengenai kaedah konfigurasi Rewrite dalam Apache, NGINX dan Caddy.
Fail .htaccess Dalam Apache
Apache HTTP Server menggunakan fail .htaccess
untuk konfigurasi peraturan Rewrite. Fail .htaccess
ialah konfigurasi tersebar yang biasanya diletakkan di direktori root laman web atau subdirektori tertentu. Ia membenarkan konfigurasi pada peringkat direktori, berkuatkuasa ke atas direktori tersebut serta semua subdirektorinya (kecuali jika subdirektori mempunyai fail .htaccess
sendiri). Apache mengurus peraturan Rewrite dengan modul mod_rewrite
.
Contoh Penggunaan Asas
Berikut ialah contoh fail .htaccess
biasa, menulis semula semua permintaan fail atau direktori yang tidak wujud ke index.php
, amalan lazim untuk kebanyakan rangka kerja PHP dan CMS:
apache
# Aktifkan enjin Rewrite
RewriteEngine On
# Jika fail atau direktori tidak wujud, jalankan peraturan Rewrite
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Tulis semula semua permintaan ke index.php dan kekalkan query string
RewriteRule ^(.*)$ index.php [L,QSA]
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Penjelasan:
RewriteEngine On
: Mengaktifkan fungsi Rewrite pada direktori semasa.RewriteCond %{REQUEST_FILENAME} !-f
: Syarat bahawa laluan fail permintaan (%{REQUEST_FILENAME}
) bukan fail wujud (!-f
).RewriteCond %{REQUEST_FILENAME} !-d
: Syarat bahawa laluan fail permintaan bukan direktori wujud (!-d
).RewriteRule ^(.*)$ index.php [L,QSA]
: Peraturan Rewrite.^(.*)$
: Padankan mana-mana laluan URL.index.php
: Tulis semula laluan yang dipadankan keindex.php
.[L]
: FlagLast
, hentikan pemprosesan kepada peraturan lain.[QSA]
: FlagQuery String Append
, menggabungkan query string asal kepada URL yang telah ditulis semula.
Peraturan Rewrite Dalam NGINX
NGINX menggunakan fail utama (nginx.conf
) atau konfigurasi laman (biasanya di conf.d
atau sites-available
/sites-enabled
) untuk pengurusan peraturan Rewrite. Peraturan NGINX biasanya diletakkan dalam blok server
(untuk tuan rumah maya) atau blok location
(padanan laluan URL tertentu). Modul Rewrite NGINX (ngx_http_rewrite_module
) berkuasa tinggi, tetapi sintaksnya sangat berbeza dari Apache.
Contoh Penggunaan Asas
Contoh berikut merupakan petikan tipikal fail konfigurasi NGINX, melaksanakan logik menulis semula permintaan ke index.php
:
nginx
server {
listen 80;
server_name servbay.demo; # Contoh nama domain ServBay
root /Applications/ServBay/www/demo; # Contoh direktori root laman
# Cuba fail, direktori, atau akhirnya tulis semula ke index.php
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# Proses permintaan fail .php, teruskan ke PHP-FPM/FastCGI
location ~ \.php$ {
# Pastikan fail wujud, elak eksekusi fail rawak
try_files $uri =404;
include fastcgi_params;
# Laluan Socket PHP FastCGI dalam ServBay
fastcgi_pass unix:/Applications/ServBay/tmp/php-cgi.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Penjelasan:
location /
: Padanan kepada permintaan root laman web.try_files $uri $uri/ /index.php?$query_string;
: Arahannya cuba:- Fail permintaan URI (
$uri
). - Direktori permintaan URI (
$uri/
). - Jika tiada, tulis semula ke
/index.php
dan lampirkan query string (?$query_string
).
- Fail permintaan URI (
location ~ \.php$
: Padanan regex untuk permintaan berakhir.php
.fastcgi_pass unix:/Applications/ServBay/tmp/php-cgi.sock;
: Teruskan permintaan PHP ke pemproses FastCGI ServBay.
Peraturan Rewrite Dalam Caddy
Caddy menggunakan fail khusus Caddyfile
untuk konfigurasi. Caddyfile
direka agar ringkas, mudah dibaca dan berkuasa. Sintaks konfigurasi Caddy berbeza jauh dari Apache dan NGINX, namun selalunya lebih intuitif. Fungsi Rewrite Caddy dicapai dengan arahan rewrite
dan pelbagai matcher fleksibel.
Contoh Penggunaan Asas
Berikut contoh petikan Caddyfile
, melaksanakan logik menulis semula ke index.php
:
bash
servbay.demo { # Contoh nama domain ServBay
root * /Applications/ServBay/www/demo # Contoh root laman web
# Teruskan permintaan PHP ke pemproses PHP FastCGI ServBay
php_fastcgi unix//Applications/ServBay/tmp/php-cgi.sock
# Sediakan servis fail statik
file_server
# Takrif matcher @notStatic: jika fail atau direktori tidak wujud
@notStatic {
not {
file {
# Cuba cari fail {path} atau direktori {path}/
# Jika tiada, matcher (@notStatic) dipenuhi
try_files {path} {path}/
}
}
}
# Jika matcher @notStatic dipenuhi, tulis semula permintaan ke /index.php
rewrite @notStatic /index.php
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Penjelasan:
servbay.demo { ... }
: Blok laman untuk konfigurasi domainservbay.demo
.root * /Applications/ServBay/www/demo
: Tetapkan root laman web.*
bermaksud semua permintaan.php_fastcgi unix//Applications/ServBay/tmp/php-cgi.sock
: Arahan Caddy asli untuk teruskan permintaan.php
kepada PHP FastCGI, ServBay sudah tetapkan laluan.file_server
: Menyediakan servis fail statik automatik kepada permintaan laluan.@notStatic { ... }
: Matcher dinamakannotStatic
.not { file { try_files {path} {path}/ } }
: Logiknya, jika{path}
atau{path}/
tiada, matcher akan dipenuhi.rewrite @notStatic /index.php
: Jika matchernotStatic
aktif, permintaan ditulis semula kepada/index.php
.
Dalam konfigurasi lalai ServBay, arahan php_fastcgi
sudah merangkumi logik try_files
seperti di atas. ServBay juga akan menyediakan Caddyfile asas untuk setiap laman web baru supaya kebanyakan rangka kerja boleh berjalan terus tanpa konfigurasi tambahan. Contoh di atas menunjukkan cara asli sintaks Caddy untuk logik tersebut.
Perhatian Migrasi Dari Apache atau NGINX ke Caddy Dalam ServBay
Apabila laman web dipindahkan dari Apache atau NGINX ke Caddy dalam ServBay, penukaran peraturan Rewrite adalah langkah penting. Kebanyakan konfigurasi sedia ada sudah dikendalikan oleh ServBay, namun bagi projek dengan banyak peraturan khusus, anda perlu menukarnya sendiri secara manual.
Rujuk panduan migrasi lengkap:
Beberapa perbezaan utama yang perlu diberi perhatian:
Sintaks Peraturan Rewrite dan Lokasi Konfigurasi:
- Apache: Menggunakan fail
.htaccess
(tersebar, peringkat direktori) atau fail utama (httpd.conf
/konfigurasi laman). Peraturan bergantung padaRewriteRule
danRewriteCond
dengan sintaks regex. - NGINX: Menggunakan fail utama (
nginx.conf
) atau konfigurasi laman (berpusat). Sering menggunakan bloklocation
, arahanrewrite
,if
dantry_files
, sintaks berbeza dengan Apache. - Caddy: Menggunakan
Caddyfile
(berpusat). Peraturan dibina dengan arahanrewrite
dan matcher fleksibel (sepertifile
,path
,header
dan lain-lain), dengan sintaks yang lebih ringkas. - Penukaran: Tukar peraturan
.htaccess
Apache atau konfigurasilocation
/rewrite
/try_files
NGINX ke sintaks Caddyfile. Tiada alat automasi satu-ke-satu – perlu manual, fahami konsep melalui dokumentasi rasmi Caddy mengenai Rewrite dan matcher.
- Apache: Menggunakan fail
Struktur Fail Konfigurasi:
- Apache: Boleh menggunakan
.htaccess
tersendiri pada pelbagai direktori, atau konfigurasi berpusat dalam fail utama untuk setiap VirtualHost. - NGINX: Berpusat dalam
nginx.conf
dan fail berkaitan dengan organisasi blokserver
danlocation
. - Caddy: Berpusat dalam fail
Caddyfile
, dengan blok laman berdasarkan alamat (sepertiservbay.demo
) dan arahan di dalamnya. Struktur Caddyfile biasanya lebih mendatar dan intuitif berbanding NGINX.
- Apache: Boleh menggunakan
Modul dan Arahan Seiras:
- Apache dan NGINX menawarkan modul dan arahan meluas. Caddy juga mempunyai ciri-ciri meluas tapi nama arahan dan logiknya agak berbeza. Contohnya,
mod_rewrite
Apache diimplementasi oleh Caddy menggunakan matcher dan arahanrewrite
; arahantry_files
dalam NGINX sepadan dengantry_files
dalam matcher Caddy, atau diuruskan olehphp_fastcgi
. - Ketika migrasi, semak arahan sepadan di dokumentasi Caddy dan fahami kaedah penggunaannya.
- Apache dan NGINX menawarkan modul dan arahan meluas. Caddy juga mempunyai ciri-ciri meluas tapi nama arahan dan logiknya agak berbeza. Contohnya,
Perilaku Lalai & Keutamaan:
- Setiap pelayan web menstruktur pemprosesan permintaan dan keutamaan peraturan dengan unik. Misalnya, cara Apache mengaplikasi
.htaccess
, keutamaan bloklocation
dalam NGINX, dan urutan arahan dalam Caddyfile (walaupun sifatnya lebih berurutan). - Selepas migrasi, pastikan semuanya diuji – jejak URL sepenuhnya – supaya semua peraturan Rewrite berjalan seperti yang diharapkan. Juga perlu diingat, konfigurasi lalai ServBay dalam Caddy mungkin sudah memuatkan peraturan asas yang anda perlukan – elakkan pertindihan atau konflik.
- Setiap pelayan web menstruktur pemprosesan permintaan dan keutamaan peraturan dengan unik. Misalnya, cara Apache mengaplikasi
Kesimpulan
ServBay menawarkan tiga pelayan web utama untuk pembangunan tempatan: Caddy, NGINX dan Apache. ServBay telah menyediakan peraturan Rewrite sedia guna untuk Caddy dan NGINX supaya kebanyakan aplikasi popular berfungsi sebaik sahaja dipasang. Bagi pembangun yang biasa dengan konfigurasi custom Apache atau NGINX, memahami perbezaan konfigurasi Rewrite dengan Caddy adalah penting.
Apache menggunakan konfigurasi berpangkalan .htaccess
serta arahan RewriteRule
/RewriteCond
secara tersebar; NGINX pula melalui fail berpusat dengan blok location
, rewrite
dan try_files
; Caddy menampilkan Caddyfile yang mudah dibaca bersama matcher dan arahan rewrite
yang berkuasa.
Kunci migrasi ialah penukaran logik Rewrite Apache atau NGINX sedia ada secara tepat kepada sintaks Caddyfile. Walaupun memerlukan sedikit masa belajar, pendekatan ringkas oleh Caddy dan bantuan konfigurasi serta panduan migrasi terperinci daripada ServBay akan sangat memudahkan proses ini. Diharap dokumen ini membantu anda memahami perbezaan penting ini, serta membolehkan pembangunan web dengan lebih cekap dalam persekitaran ServBay.