Ένα. Αντιστοίχιση τυπικής έκφρασης, όπου: * ~ είναι αντιστοίχιση με διάκριση πεζών-κεφαλαίων * ~* είναι μια αντιστοίχιση χωρίς διάκριση πεζών-κεφαλαίων * !~ και !~* είναι αναντιστοιχίες με διάκριση πεζών-κεφαλαίων και πεζών-κεφαλαίων, αντίστοιχα Δύο. αντιστοίχιση αρχείου και καταλόγου, όπου: * Τα -f και !-f χρησιμοποιούνται για να προσδιοριστεί εάν υπάρχει ένα αρχείο * Τα -d και !-d χρησιμοποιούνται για να προσδιοριστεί εάν υπάρχει κατάλογος * Τα -e και !-e χρησιμοποιούνται για να προσδιορίσουν εάν υπάρχει ένα αρχείο ή ένας κατάλογος * Τα -x και !-x χρησιμοποιούνται για να προσδιοριστεί εάν ένα αρχείο είναι εκτελέσιμο ή όχι 3. Η τελευταία παράμετρος της εντολής επανεγγραφής είναι το σημάδι σημαίας, το οποίο επισημαίνεται με: Το 1.last ισοδυναμεί με το σημάδι [L] στο apache, που σημαίνει επανεγγραφή. 2. Διάλειμμα Αφού ολοκληρωθεί η αντιστοίχιση αυτού του κανόνα, η αντιστοίχιση θα τερματιστεί και οι επόμενοι κανόνες δεν θα ταιριάζουν πλέον. 3.Ανακατεύθυνση επιστρέφει 302 προσωρινή ανακατεύθυνση και η διεύθυνση του προγράμματος περιήγησης θα εμφανίσει τη διεύθυνση URL μετά το άλμα. 4.μόνιμη επιστροφή 301 μόνιμη ανακατεύθυνση, η διεύθυνση του προγράμματος περιήγησης θα εμφανίσει τη διεύθυνση URL μετά το άλμα.
Χρησιμοποιήστε το last και το break για να εφαρμόσετε επανεγγραφές URI και η γραμμή διευθύνσεων του προγράμματος περιήγησης παραμένει αμετάβλητη. Και υπάρχει μια μικρή διαφορά μεταξύ των δύο, η χρήση της εντολής ψευδώνυμου πρέπει να επισημαίνεται με τελευταίο. Όταν χρησιμοποιείτε proxy_pass οδηγίες, πρέπει να χρησιμοποιήσετε την ετικέτα διακοπής. Αφού εκτελεστεί η τελευταία ετικέτα σε αυτόν τον κανόνα επανεγγραφής, θα βρίσκεται στον διακομιστή{......} Η ετικέτα επανεκκινεί το αίτημα, ενώ η ετικέτα διακοπής τερματίζει την αντιστοίχιση μετά την ολοκλήρωση της αντιστοίχισης κανόνα. Για παράδειγμα: εάν ανακατευθύνουμε μια διεύθυνση URL όπως /photo/123456 στο /path/to/photo/12/1234/123456.png ξαναγράψτε "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;
Τέσσερα. Κανόνας NginxRewrite
1.εντολή break Περιβάλλον χρήσης: διακομιστής, τοποθεσία, εάν; Η οδηγία ολοκληρώνει το τρέχον σύνολο κανόνων και δεν χειρίζεται πλέον την οδηγία επανεγγραφής.
2. Εάν η οδηγία Περιβάλλον χρήσης: διακομιστής, τοποθεσία Αυτή η οδηγία χρησιμοποιείται για να ελέγξετε εάν πληρούται μια συνθήκη και, εάν ναι, εκτελέστε τη δήλωση μέσα στα σγουρά σιδεράκια. Η εντολή If δεν υποστηρίζει ένθεση και δεν υποστηρίζει πολλαπλές συνθήκες && και || Θεραπεία.
3. Εντολή επιστροφής σύνταξη: κωδικός επιστροφής ; Περιβάλλον χρήσης: διακομιστής, τοποθεσία, εάν; Αυτή η οδηγία χρησιμοποιείται για τον τερματισμό της εκτέλεσης του κανόνα και την επιστροφή ενός κωδικού κατάστασης στον πελάτη. Παράδειγμα: Αν η διεύθυνση URL επίσκεψης λήγει σε ".sh" ή ".bash", επιστρέφεται ένας κωδικός κατάστασης 403 τοποθεσία ~ .*\. (sh|bash)?$
{ επιστροφή 403;
}
4. Ξαναγράψτε την εντολή Σύνταξη: σημαία αντικατάστασης rewriteregex Περιβάλλον χρήσης: διακομιστής, τοποθεσία, εάν Αυτή η οδηγία ανακατευθύνει το URI με βάση την έκφραση ή τροποποιεί τη συμβολοσειρά. Οι οδηγίες εκτελούνται με τη σειρά στο αρχείο διαμόρφωσης. Σημειώστε ότι η επανεγγραφή εκφράσεων ισχύει μόνο για σχετικές διαδρομές. Εάν θέλετε να αντιστοιχίσετε ονόματα κεντρικών υπολογιστών, θα πρέπει να χρησιμοποιήσετε δηλώσεις if, για παράδειγμα παρακάτω: if( $host ~* www\.(. *) )
{ ορίστε $host_without_www $1; ξαναγράψτε ^(.*)$ http://$host_without_www$1permanent;
}
5.Εντολή Ορισμός Σύνταξη: ορισμόςμεταβλητή τιμή; Προεπιλογή: καμία. Περιβάλλον χρήσης: διακομιστής, τοποθεσία, εάν; Αυτή η οδηγία χρησιμοποιείται για τον ορισμό μιας μεταβλητής και την εκχώρηση μιας τιμής σε αυτήν. Η τιμή μιας μεταβλητής μπορεί να είναι κείμενο, μεταβλητή ή ένωση μεταβλητών κειμένου. Παράδειγμα: set$varname "hello world";
6.Uninitialized_variable_warn οδηγίες Σύνταξη: uninitialized_variable_warnon|off Περιβάλλον χρήσης: http, διακομιστής, τοποθεσία, εάν Αυτή η εντολή χρησιμοποιείται για την ενεργοποίηση και απενεργοποίηση του προειδοποιητικού μηνύματος για μη αρχικοποιημένες μεταβλητές και η προεπιλεγμένη τιμή είναι Ενεργό.
Πέντε. Παράδειγμα γραφής κανόνων Nginx Rewrite 1. Όταν το αρχείο και ο κατάλογος στον οποίο έχετε πρόσβαση δεν υπάρχουν, ανακατευθύνετε σε ένα συγκεκριμένο αρχείο php if( !-e $request_όνομα_αρχείου )
{ ξαναγράψτε ^/(.*)$ index.php τελευταίο.
}
2. Ανταλλαγή καταλόγου /123456/xxxx ====> /xxxx?id=123456 ξαναγράψτε ^/(\d+)/(.+)/ /$2?id=$1 τελευταίο;
3. Εάν ο πελάτης χρησιμοποιεί πρόγραμμα περιήγησης IE, ανακατευθύνει στον κατάλογο /ie if( $http_user_agent ~ MSIE)
{ ξαναγράψτε ^(.*)$ /ie/$1 διάλειμμα;
}
4. Απενεργοποιήστε την πρόσβαση σε πολλούς καταλόγους τοποθεσία ~ ^/(cron|πρότυπα)/
{ Αρνηθείτε τα πάντα. διάλειμμα;
}
5. Απενεργοποιήστε την πρόσβαση σε αρχεία που ξεκινούν με /data τοποθεσία ~ ^/δεδομένα
{ Αρνηθείτε τα πάντα.
}
6. Απαγορεύστε την πρόσβαση σε αρχεία με ονόματα επιθημάτων αρχείων .sh, .flv .mp3 τοποθεσία ~ .*\. (sh|flv|mp3)$
{ επιστροφή 403;
}
7. Ρυθμίστε το χρόνο προσωρινής μνήμης του προγράμματος περιήγησης για ορισμένους τύπους αρχείων τοποθεσία ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{ λήγει στις 30 ημέρες·
} τοποθεσία ~ .*\. (js|css)$
{ λήγει 1 ώρα.
}
8. Ορίστε τους χρόνους λήξης για favicon.ico και robots.txt. Εδώ, η favicon.ico είναι 99 ημέρες και η robots.txt είναι 7 ημέρες και το αρχείο καταγραφής σφαλμάτων 404 δεν καταγράφεται τοποθεσία ~(favicon.ico) { log_not_found απενεργοποιημένο? λήγει το 99d. διάλειμμα;
} τοποθεσία ~(robots.txt) { log_not_found απενεργοποιημένο? λήγει στις 7 ημέρες· διάλειμμα;
}
9. Ορίστε το χρόνο λήξης ενός συγκεκριμένου εγγράφου. Αυτό είναι 600 δευτερόλεπτα και τα αρχεία καταγραφής πρόσβασης δεν καταγράφονται τοποθεσία ^~ /html/scripts/loadhead_1.js { access_log απενεργοποιημένο; ρίζα /opt/lampp/htdocs/web; λήγει 600? διάλειμμα;
}
10. Αρχεία κατά της διασύνδεσης και ορίστε χρόνους λήξης Return412 εδώ είναι ένας προσαρμοσμένος κωδικός κατάστασης HTTP, ο οποίος είναι προεπιλεγμένος σε 403, ο οποίος είναι βολικός για την εύρεση του σωστού αιτήματος διασύνδεσης "ξαναγράψτε ^/ ; "Εμφανίζει μια εικόνα ενός anti-hotlink «access_log μακριά;» Δεν καταγράφονται αρχεία καταγραφής πρόσβασης, μειώνοντας το άγχος "Λήγει 3D" 3 ημέρες προσωρινής μνήμης του προγράμματος περιήγησης για όλα τα αρχεία
τοποθεσία ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers κανένα δεν έχει αποκλειστεί *.xx.com*.xx.net localhost 208.97.167.194; αν ($invalid_referer) { ξαναγράψτε ^/ ; επιστροφή 412; διάλειμμα;
} access_log απενεργοποιημένο; ρίζα /opt/lampp/htdocs/web; λήγει 3d? διάλειμμα;
}
11. Να επιτρέπεται μόνο η σταθερή πρόσβαση IP στον ιστότοπο με κωδικό πρόσβασης
ρίζα /opt/htdocs/www; επιτρέψτε 208.97.167.194; επιτρέψτε το 222.33.1.2; επιτρέψτε 231.152.49.4; Αρνηθείτε τα πάντα. auth_basic "C1G_ADMIN"; auth_basic_user_file htpasswd;
12Μετατρέψτε αρχεία σε καταλόγους πολλαπλών επιπέδων σε ένα αρχείο για να βελτιώσετε τα εφέ SEO
/job-123-456-789.html 指向/job/123/456/789.html
ξαναγράψτε^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html τελευταίο;
13. Ανακατεύθυνση όταν δεν υπάρχουν αρχεία και κατάλογοι:
αν (!-e $request_filename) { proxy_pass http://127.0.0.1;
}
14. Τοποθετήστε έναν φάκελο στον ριζικό κατάλογο στον κατάλογο επιπέδου 2 Για παράδειγμα, το /shanghaijob/ δείχνει στο /area/shanghai/ Εάν αλλάξετε το τελευταίο σε μόνιμο, τότε η γραμμή διευθύνσεων του προγράμματος περιήγησης θα είναι /location/shanghai/ ξαναγράψτε ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last; Το πρόβλημα με το παραπάνω παράδειγμα είναι ότι δεν ταιριάζει κατά την πρόσβαση στο /shanghai ξαναγράψτε ^/([0-9a-z]+)job$ /area/$1/ last; ξαναγράψτε ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last; Με αυτόν τον τρόπο/η Σαγκάη είναι επίσης προσβάσιμη, αλλά οι σχετικοί σύνδεσμοι στη σελίδα δεν είναι διαθέσιμοι, Εάν η πραγματική διεύθυνση ./list_1.html είναι /area/shanghia/list_1.html θα γίνει /list_1.html, καθιστώντας την απρόσιτη. Τότε δεν μπορώ να προσθέσω αυτόματο άλμα Το (-d $request_filename) έχει μια συνθήκη ότι πρέπει να είναι πραγματικός κατάλογος και η επανεγγραφή μου δεν είναι, επομένως δεν έχει κανένα αποτέλεσμα αν (-d $request_filename){ ξαναγράψτε ^/(.*)([^/])$ http://$host/$1$2/permanent;
} Είναι εύκολο να το κάνετε αφού μάθετε τον λόγο, επιτρέψτε μου να πηδήξω χειροκίνητα ξαναγράψτε ^/([0-9a-z]+)job$ /$1job/permanent; ξαναγράψτε ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
15. Άλμα ονόματος τομέα Διακομιστής
{ ακούω 80; server_name jump.linuxidc.com; ευρετήριο index.html index.htm index.php; ρίζα /opt/lampp/htdocs/www; ξαναγράψτε ^/ http://www.xx.com/; access_log απενεργοποιημένο;
}
16. Στροφή πολλαπλών τομέων server_name www.xx.comwww.xx.com; ευρετήριο index.html index.htm index.php; ρίζα /opt/lampp/htdocs; αν ($host ~ "linuxidc\.net") { ξαναγράψτε ^(.*) http://www.xx.com$1permanent;
}
6. Καθολικές μεταβλητές NGINX arg_PARAMETER #这个变量包含GET请求中, εάν υπάρχει μεταβλητή ΠΑΡΑΜΕΤΡΟΣ. args #这个变量等于请求行中 (αίτημα GET), π.χ., foo=123&bar=blahblah; binary_remote_addr #二进制的客户地址. body_bytes_sent #响应时送出的body字节数数量. Αυτά τα δεδομένα είναι ακριβή ακόμη και αν διακοπεί η σύνδεση. Πεδίο μήκους content_length #请求头中的Content. Πεδίο content_type #请求头中的Content-Type. cookie_COOKIE #cookie την τιμή της μεταβλητής COOKIE document_root #当前请求在root指令中指定的值. document_uri #与uri相同. host #请求主机头字段, αλλιώς το όνομα του server. hostname #Set στο όνομα κεντρικού υπολογιστή του μηχανήματος όπως επιστρέφεται από το gethostname http_HEADER is_args #如果有args参数, αυτή η μεταβλητή είναι ίση με "?", διαφορετικά ίση με "", μηδενική τιμή. http_user_agent #客户端agent信息 http_cookie #客户端cookie信息 limit_rate #这个变量可以限制连接速率. query_string #与args相同. request_body_file #客户端请求主体信息的临时文件名. request_method #客户端请求的动作, συνήθως GET ή POST. remote_addr #客户端的IP地址. remote_port #客户端的端口. remote_user #已经经过Auth Όνομα χρήστη επικυρωμένο από τη Βασική Ενότητα. request_completion #如果请求结束, ρυθμίστε το σε OK. Κενό όταν το αίτημα δεν έχει ολοκληρωθεί ή εάν το αίτημα δεν είναι το τελευταίο στην αλυσίδα αιτήσεων. request_method #GET或POST request_filename #当前请求的文件路径, που δημιουργούνται από οδηγίες ρίζας ή ψευδωνύμου και αιτήματα URI. request_uri #包含请求参数的原始URI, δεν περιέχει το όνομα κεντρικού υπολογιστή, π.χ. "/foo/bar.php?arg=baz". δεν μπορεί να τροποποιηθεί. συστήματος #HTTP方法 (π.χ. http, https). server_protocol #请求使用的协议, συνήθως HTTP/1.0 ή HTTP/1.1. server_addr #服务器地址, αυτή η τιμή μπορεί να προσδιοριστεί μετά την ολοκλήρωση μιας κλήσης συστήματος. server_name #服务器名称. server_port #请求到达服务器的端口号.
Επτά. Αντιστοιχία μεταξύ των κανόνων Apache και Nginx Το RewriteCond του Apache αντιστοιχεί στο if του Nginx Το RewriteRule του Apache αντιστοιχεί στην επανεγγραφή του Nginx Το [R] του Apache αντιστοιχεί στην ανακατεύθυνση του Nginx Το [P] στο Apache αντιστοιχεί στο τελευταίο στο Nginx Το [R,L] του Apache αντιστοιχεί στην ανακατεύθυνση του Nginx Το [P,L] του Apache αντιστοιχεί στο τελευταίο του Nginx Το [PT,L] του Apache αντιστοιχεί στο τελευταίο του Nginx
Για παράδειγμα, επιτρέψτε σε ένα συγκεκριμένο όνομα τομέα να έχει πρόσβαση σε αυτόν τον ιστότοπο και να στρέφεστε πάντα σε www.xx.com άλλα ονόματα τομέα Απάτσι: RewriteCond %{HTTP_HOST} !^(.*?) \.aaa\.com$[NC] RewriteCond %{HTTP_HOST} !^localhost$ RewriteCond %{HTTP_HOST}!^192\.168\.0\. (.*?) $ RewriteRule ^/(.*)$ http://www.xx.com[R,L]
Nginx: if( $host ~* ^(.*)\.aaa\.com$ )
{ ορίστε $allowHost '1';
} if( $host ~* ^localhost )
{ ορίστε $allowHost '1';
} if( $host ~* ^192\.168\.1\.(. *?) $ )
{ ορίστε $allowHost '1';
} if( $allowHost !~ '1' )
{ ξαναγράψτε ^/(.*)$ http://www.xx.comredirect ;
}
|