Anda dapat menggunakan Include
arahan dalam httpd.conf
untuk dapat mempertahankan arahan ulang di file lain. Tetapi itu tidak akan sangat efisien, karena setiap permintaan perlu diperiksa terhadap banyak ekspresi reguler. Juga server restart akan diperlukan setelah setiap perubahan dalam file.
Cara yang lebih baik untuk begitu banyak pengalihan adalah dengan menggunakan jenis pengarahan RewriteMapdbm
untuk mendeklarasikan peta dari URI ke pengalihan. Dengan cara ini akan efisien, karena pencarian dbm sangat cepat, dan setelah perubahan peta Anda tidak perlu me-restart server, karena httpd
memeriksa waktu modifikasi file peta.
Aturan penulisan ulang akan terlihat seperti ini (diuji pada komputer Fedora 16 saya):
RewriteEngine On
RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]
Dan peta dbm akan dibuat dari peta teks yang /etc/httpd/conf/redirects.txt
tampak seperti ini:
/foo http://serverfault.com/
/bar/lorem/ipsum/ http://stackoverflow.com/
menggunakan perintah
httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db
!=
dan""
- Saya telah memperbaiki contoh saya ke versi yang berfungsi dan diuji sekarang.?
di URL), tetapi itu juga mungkin . Seperti sekarang ini hanya akan menambahkan string kueri ke redirect, misalnyahttp://yourserver.com/foo?q=bar
akan dialihkan kehttp://serverfault.com/?q=bar
.RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
memberi kesalahanRewriteMap dbm type db is invalid
. Tetapi ketika saya menggunakannyaRewriteMap redirects txt:/etc/httpd/conf/redirects.txt
itu berhasil. Saya masih ingin pergi dengan cara hash seperti yang Anda jelaskan daripada teks biasa. Tetapi saya tidak dapat menemukan banyak tentang kesalahan dbm. Terima kasih atas bantuan Anda.Saya akan menulis skrip yang menghasilkan VHOST baru hanya dengan tautan dari daftar.
sumber