Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 11719|Jawab: 1

[Situs web] Contoh menggambarkan aturan penulisan ulang di Nginx

[Salin tautan]
Diposting pada 05/12/2014 22.45.25 | | |
Satu. Pencocokan ekspresi reguler, di mana:
* ~ adalah pencocokan peka huruf besar/kecil
* ~* adalah kecocokan yang tidak peka huruf besar/kecil
* !~ dan !~* masing-masing adalah ketidakcocokan peka huruf besar/kecil dan tidak peka huruf besar/kecil
Dua. file dan direktori cocok, di mana:
* -f dan !-f digunakan untuk menentukan apakah ada file
* -d dan !-d digunakan untuk menentukan apakah direktori ada
* -e dan !-e digunakan untuk menentukan apakah ada file atau direktori
* -x dan !-x digunakan untuk menentukan apakah file dapat dieksekusi atau tidak
3. Parameter terakhir dari instruksi penulisan ulang adalah tanda bendera, yang ditandai dengan:
1.last setara dengan tanda [L] dalam apache, yang berarti menulis ulang.
2. Putus Setelah pencocokan aturan ini selesai, pencocokan akan dihentikan dan aturan berikutnya tidak akan lagi cocok.
3.redirect mengembalikan 302 pengalihan sementara, dan alamat browser akan menampilkan alamat URL setelah lompatan.
4. pengalihan permanen 301 pengembalian permanen, alamat browser akan menampilkan alamat URL setelah lompatan.


Gunakan terakhir dan istirahat untuk menerapkan penulisan ulang URI, dan bilah alamat browser tetap tidak berubah. Dan ada sedikit perbedaan antara keduanya, menggunakan perintah alias harus ditandai dengan last; Saat menggunakan proxy_pass direktif, Anda perlu menggunakan tag jeda. Setelah tag terakhir dieksekusi dalam aturan penulisan ulang ini, tag tersebut akan berada di server{......} tag memulai kembali permintaan, sedangkan tag jeda mengakhiri kecocokan setelah pencocokan aturan selesai.
Misalnya: jika kita mengarahkan URL seperti /photo/123456 ke /path/to/photo/12/1234/123456.png
tulis ulang "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;


Empat. Aturan NginxRewrite


1. Perintah putus
Lingkungan penggunaan: server, lokasi, jika;
Direktif melengkapi kumpulan aturan saat ini dan tidak lagi menangani arahan penulisan ulang.


2. Jika direktif
Lingkungan penggunaan: server, lokasi
Instruksi ini digunakan untuk memeriksa apakah suatu kondisi terpenuhi, dan jika demikian, jalankan pernyataan di dalam kurung kurawal. Perintah If tidak mendukung bersarang, dan tidak mendukung beberapa kondisi && dan || Pengobatan.


3. Perintah Kembali
sintaks: kode pengembalian ;
Lingkungan penggunaan: server, lokasi, jika;
Instruksi ini digunakan untuk mengakhiri eksekusi aturan dan mengembalikan kode status ke klien.
Contoh: Jika URL yang dikunjungi diakhiri dengan ".sh" atau ".bash", kode status 403 akan ditampilkan
lokasi ~ .*\. (sh|bash)?$
{
mengembalikan 403;
}


4. Tulis ulang perintah
Sintaks: rewriteregex replacement flag
Lingkungan penggunaan: server, lokasi, jika
Direktif ini mengalihkan URI berdasarkan ekspresi, atau memodifikasi string. Instruksi dijalankan dalam urutan dalam file konfigurasi. Perhatikan bahwa penulisan ulang ekspresi hanya berlaku untuk jalur relatif. Jika Anda ingin memasangkan nama host, Anda harus menggunakan pernyataan if, misalnya di bawah ini:
if( $host ~* www\.(. *) )
{
atur $host_tanpa_www $1;
tulis ulang ^(.*)$ http://$host_without_www$1permanent;
}


5. Atur perintah
Sintaks: nilai setvariabel; Default: tidak ada; Lingkungan penggunaan: server, lokasi, jika;
Direktif ini digunakan untuk menentukan variabel dan menetapkan nilai padanya. Nilai variabel dapat berupa teks, variabel, atau penyatuan variabel teks.
Contoh: set$varname "hello world";


6.Uninitialized_variable_warn instruksi
Sintaks: uninitialized_variable_warnon|off
Lingkungan penggunaan: http, server, lokasi, jika
Perintah ini digunakan untuk mengaktifkan dan menonaktifkan pesan peringatan untuk variabel yang tidak diinisialisasi, dan nilai defaultnya adalah Aktif.




Lima. Contoh penulisan aturan Nginx Rewrite
1. Ketika file dan direktori yang diakses tidak ada, alihkan ke file php tertentu
if( !-e $request_filename )
{
tulis ulang ^/(.*)$ index.php terakhir;
}


2. Pertukaran direktori /123456/xxxx ====> /xxxx?id=123456
tulis ulang ^/(\d+)/(.+)/ /$2?id=$1 terakhir;


3. Jika klien menggunakan browser IE, klien akan dialihkan ke direktori /ie
if( $http_user_agent ~ MSIE)
{
tulis ulang ^(.*)$ /ie/$1 istirahat;
}


4. Nonaktifkan akses ke beberapa direktori
lokasi ~ ^/(cron|templates)/
{
menyangkal semua;
istirahat;
}


5. Nonaktifkan akses ke file yang dimulai dengan /data
lokasi ~ ^/data
{
menyangkal semua;
}


6. Melarang akses ke file dengan nama akhiran file .sh, .flv, .mp3
lokasi ~ .*\. (sh|flv|mp3)$
{
mengembalikan 403;
}


7. Atur waktu cache browser untuk jenis file tertentu
lokasi ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
kedaluwarsa 30d;
}
lokasi ~ .*\. (js|css)$
{
kedaluwarsa 1 jam;
}


8. Tetapkan waktu kedaluwarsa untuk favicon.ico dan robots.txt;
Di sini, favicon.ico adalah 99 hari, dan robots.txt adalah 7 hari, dan log kesalahan 404 tidak dicatat
lokasi ~(favicon.ico) {
log_not_found mati;
kedaluwarsa 99d;
istirahat;
}
lokasi ~(robots.txt) {
log_not_found mati;
kedaluwarsa 7d;
istirahat;
}


9. Tetapkan waktu kedaluwarsa dokumen tertentu; Ini adalah 600 detik, dan log akses tidak direkam
lokasi ^~ /html/scripts/loadhead_1.js {
access_log mati;
root /opt/lampp/htdocs/web;
kedaluwarsa 600;
istirahat;
}


10. File anti-hotlink dan atur waktu kedaluwarsa
Return412 berikut adalah kode status HTTP khusus, yang default ke 403, yang nyaman untuk menemukan permintaan hotlink yang benar
"menulis ulang ^/; "Menampilkan gambar anti-hotlink
"access_log pergi;" Tidak ada log akses yang direkam, mengurangi stres
"Kedaluwarsa 3D" 3 hari cache browser untuk semua file


lokasi ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers tidak ada yang memblokir *.xx.com*.xx.net localhost 208.97.167.194;
if ($invalid_referer) {
menulis ulang ^/;
mengembalikan 412;
istirahat;
}
access_log mati;
root /opt/lampp/htdocs/web;
kedaluwarsa 3d;
istirahat;
}


11. Hanya izinkan akses IP tetap ke situs web dengan kata sandi


root /opt/htdocs/www;
izinkan 208.97.167.194;
izinkan 222.33.1.2;
izinkan 231.152.49.4;
menyangkal semua;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;


12Konversi file di direktori multi-level menjadi satu file untuk meningkatkan efek SEO
/job-123-456-789.html 指向/job/123/456/789.html


tulis ulang^/pekerjaan-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html terakhir;


13. Pengalihan saat file dan direktori tidak ada:


if (!-e $request_filename) {
proxy_pass http://127.0.0.1;
}


14. Arahkan folder di direktori root ke direktori level 2
Misalnya, /shanghaijob/ menunjuk ke /area/shanghai/
Jika Anda mengubah terakhir menjadi permanen, maka bilah alamat browser akan menjadi /location/shanghai/
tulis ulang ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Masalah dengan contoh di atas adalah tidak akan cocok saat mengakses /shanghai
tulis ulang ^/([0-9a-z]+)job$ /area/$1/ last;
tulis ulang ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
This way/shanghai juga dapat diakses, tetapi tautan relatif di halaman tidak tersedia,
Jika ./list_1.html alamat sebenarnya adalah /area/shanghia/list_1.html akan menjadi /list_1.html, membuatnya tidak dapat diakses.
Maka saya tidak dapat menambahkan lompatan otomatis
(-d $request_filename) memiliki kondisi bahwa itu harus direktori nyata, dan penulisan ulang saya tidak, jadi tidak berpengaruh
if (-d $request_filename){
tulis ulang ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
Mudah dilakukan setelah mengetahui alasannya, biarkan saya melompat secara manual
tulis ulang ^/([0-9a-z]+)job$ /$1job/permanen;
tulis ulang ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;


15. Melompat nama domain
server
{
dengarkan 80;
server_name jump.linuxidc.com;
indeks index.html index.htm index.php;
root /opt/lampp/htdocs/www;
menulis ulang ^/ http://www.xx.com/;
access_log mati;
}


16. Pergantian multi-domain
server_name www.xx.comwww.xx.com;
indeks index.html index.htm index.php;
root /opt/lampp/htdocs;
if ($host ~ "linuxidc\.net") {
tulis ulang ^(.*) http://www.xx.com$1permanen;
}


6. Variabel global NGINX
arg_PARAMETER #这个变量包含GET请求中, jika ada variabel PARAMETER.
parameter args #这个变量等于请求行中 (permintaan GET), misalnya, foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Data ini akurat bahkan jika koneksi terganggu.
content_length #请求头中的Content bidang panjang.
content_type #请求头中的Content-Type.
cookie_COOKIE #cookie nilai variabel COOKIE
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
host #请求主机头字段, atau nama server.
nama host #Set ke nama host mesin seperti yang dikembalikan oleh gethostname
http_HEADER
is_args #如果有args参数, variabel ini sama dengan "?", jika tidak sama dengan "", nilai nol.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, biasanya GET atau POST.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Nama pengguna yang divalidasi oleh Modul Dasar.
request_completion #如果请求结束, atur ke OK. Kosongkan saat permintaan belum selesai atau jika permintaan bukan yang terakhir dalam rantai permintaan.
request_method #GET或POST
request_filename #当前请求的文件路径, dihasilkan oleh arahan root atau alias dan permintaan URI.
request_uri #包含请求参数的原始URI, itu tidak berisi nama host, misalnya, "/foo/bar.php?arg=baz". tidak dapat dimodifikasi.
skema #HTTP方法 (misalnya http, https).
server_protocol #请求使用的协议, biasanya HTTP/1.0 atau HTTP/1.1.
server_addr #服务器地址, nilai ini dapat ditentukan setelah panggilan sistem selesai.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Tujuh. Korespondensi antara aturan Apache dan Nginx
RewriteCond Apache sesuai dengan if Nginx
RewriteRule Apache sesuai dengan penulisan ulang Nginx
[R] Apache sesuai dengan pengalihan Nginx
[P] dalam Apache sesuai dengan terakhir dalam Nginx
[R,L] Apache sesuai dengan pengalihan Nginx
[P,L] Apache sesuai dengan yang terakhir dari Nginx
[PT,L] Apache sesuai dengan yang terakhir Nginx


Misalnya, izinkan nama domain tertentu untuk mengakses situs ini, dan selalu beralih ke nama domain www.xx.com lain
  Apache:
Tulis ulangCond %{HTTP_HOST} !^(.*?) \.aaa\.com$[NC]
RewriteCond %{HTTP_HOST} !^localhost$
Tulis ulangCond %{HTTP_HOST}!^192\.168\.0\. (.*?) $
RewriteRule ^/(.*)$ http://www.xx.com[R,L]


  Nginx:
if( $host ~* ^(.*)\.aaa\.com$ )
{
set $allowHost '1';
}
if( $host ~* ^localhost )
{
set $allowHost '1';
}
jika( $host ~* ^192\.168\.1\.(. *?) $ )
{
set $allowHost '1';
}
jika( $allowHost !~ '1' )
{
tulis ulang ^/(.*)$ http://www.xx.comredirect ;
}





Mantan:Sina Weibo memindai kode untuk membayar 1 sen untuk menerima bonus akhir tahun hingga 2015 yuan
Depan:CMD5 memecahkan kata sandi administrator sistem Windows
Diposting pada 07/12/2014 17.25.05 |
Membaca dan memposting kembali adalah kebajikan
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com