Regular expression matches, where:
- * ~ to Match case sensitivity
- * ~* matching for case-insensitive case
- *!~ and!~* are case insensitive and case-insensitive mismatches, respectively
File and directory matching, where:
- *-F and!-f are used to determine whether a file exists
- *-D and!-d used to determine whether a directory exists
- *-E and!-e used to determine whether a file or directory exists
- *-X and!-x are used to determine whether a file is executable
Flag tags are:
- * Last equivalent to the [L] tag in Apache, which means complete rewrite
- * Break termination match, no longer match the following rule
- * REDIRECT Return 302 temporary redirect Address bar will show the address after the jump
- * Permanent return 301 Permanent redirect Address bar will show the address after the jump
Some of the global variables available can be used as conditional judgments (pending completion)
- $args
- $content _length
- $content _type
- $document _root
- $document _uri
- $host
- $http _user_agent
- $http _cookie
- $limit _rate
- $request _body_file
- $request _method
- $remote _addr
- $remote _port
- $remote _user
- $request _filename
- $request _uri
- $query _string
- $scheme
- $server _protocol
- $server _addr
- $server _name
- $server _port
- $uri
Combined with the qeephp example
- if (!-d $request _filename) {
- Rewrite ^/([a-z-a-z]+)/([a-z-a-z]+)/? (. *) $/index.php?namespace=user&controller=$1&action=$2&$3 last;
- Rewrite ^/([a-z-a-z]+)/?$/index.php?namespace=user&controller=$1 last;
- Break
Multi-Directory conversion parameters
ABC.DOMIAN.COM/SORT/2 => abc.domian.com/index.php?act=sort&name=abc&id=2
- if ($host ~* (. *) \.domain\.com) {
- Set $sub _name $;
- Rewrite ^/sort\/(\d+) \/?$/index.php?act=sort&cid= $sub _name&id=$1 last;
- }
Directory swap
/123456/xxxx->/xxxx?id=123456
- Rewrite ^/(\d+)/(. +)//$2?id=$1 last;
For example, the following settings Nginx are redirected to the/nginx-ie directory using the user's use of IE:
- if ($http _user_agent ~ msie) {
- Rewrite ^ (. *) $/nginx-ie/$1 break;
- }
Directory automatically add "/"
- if (-D $request _filename) {
- Rewrite ^/(. *) ([^/]) $ http://$host/$1$2/permanent;
- }
Prohibit htaccess
- Location ~/\.ht {
- Deny all;
- }
Prohibit multiple directories
- Location ~ ^/(cron|templates)/{
- Deny all;
- Break
- }
Prohibit files that start with/data
Can prohibit/data/under the multi-level directory. Log.txt and other requests;
- Location ~ ^/data {
- Deny all;
- }
Prohibit a single directory
cannot be forbidden. Log.txt can request
- location/searchword/cron/{
- Deny all;
- }
Prohibit individual files
- Location ~/data/sql/data.sql {
- Deny all;
- }
Set expiration time for Favicon.ico and robots.txt;
Here for Favicon.ico 99 days, robots.txt 7 days does not record 404 error log
- Location ~ (favicon.ico) {
- Log_not_found off;
- Expires 99d;
- Break
- }
- Location ~ (robots.txt) {
- Log_not_found off;
- Expires 7d;
- Break
- }
Sets the expiration time for a file; This is 600 seconds, and the access log is not logged
- Location ^~/html/scripts/loadhead_1.js {
- Access_log off;
- Root/opt/lampp/htdocs/web;
- Expires 600;
- Break
- }
File anti-hotlinking and set expiration time
The return 412 here is a custom HTTP status code, the default is 403, to easily find the right hotlinking request
"Rewrite ^/yun_qi_img/leech.gif;" Display an anti-theft chain picture
"Access_log off;" Do not log access logs to reduce stress
"Expires 3d" browser cache for all files 3 days
- Location ~* ^.+\. (JPG|JPEG|GIF|PNG|SWF|RAR|ZIP|CSS|JS) $ {
- Valid_referers none blocked *.c1gstudio.com *.c1gstudio.net localhost 208.97.167.194;
- if ($invalid _referer) {
- Rewrite ^/yun_qi_img/leech.gif;
- return 412;
- Break
- }
- Access_log off;
- Root/opt/lampp/htdocs/web;
- Expires 3d;
- Break
- }
Only fixed IP access to the site, plus password
- root/opt/htdocs/www;
- Allow 208.97.167.194;
- Allow 222.33.1.2;
- Allow 231.152.49.4;
- Deny all;
- Auth_basic "C1g_admin";
- Auth_basic_user_file htpasswd;
Turn the files in a multilevel directory into a file to enhance the SEO effect
/job-123-456-789.html Point to/job/123/456/789.html
- Rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+) \.html$/job/$1/$2/jobshow_$3.html last;
Point a folder in the root directory to level 2 directory
such as/Shanghaijob/point to/area/Shanghai/
If you change the last to permanent, then the browser address bar is/location/shanghai/
- Rewrite ^/([0-9a-z]+) job/(. *) $/area/$1/$2 last;
The problem with the example above is that it will not match when accessing the/shanghai
- Rewrite ^/([0-9a-z]+) job$/area/$1/last;
- Rewrite ^/([0-9a-z]+) job/(. *) $/area/$1/$2 last;
This/shanghai can also be accessed, but the relative links in the page are not available.
such as./list_1.html real address is/area/shanghia/list_1.html will become/list_1.html, lead to inaccessible.
Then I'll go with the automatic jump.
(-D $request _filename) It has a condition that is required for the real directory, and my rewrite is not, so no effect
- if (-D $request _filename) {
- Rewrite ^/(. *) ([^/]) $ http://$host/$1$2/permanent;
- }
Know the reason to do it, let me manually jump it
- Rewrite ^/([0-9a-z]+) job$/$1job/permanent;
- Rewrite ^/([0-9a-z]+) job/(. *) $/area/$1/$2 last;
redirect When files and directories do not exist:
- if (!-e $request _filename) {
- Proxy_pass http://127.0.0.1;
- }
Domain Jump
- Server
- {
- Listen 80;
- server_name jump.c1gstudio.com;
- Index index.html index.htm index.php;
- root/opt/lampp/htdocs/www;
- Rewrite ^/http://www.c1gstudio.com/;
- Access_log off;
- }
Multi-domain Direction
- server_name www.c1gstudio.com www.c1gstudio.net;
- Index index.html index.htm index.php;
- Root/opt/lampp/htdocs;
- if ($host ~ "C1gstudio\.net") {
- Rewrite ^ (. *) http://www.c1gstudio.com$1 permanent;
- }
Level three domain jump
- if ($http _host ~* "^ (. *) \.i\.c1gstudio\.com$") {
- Rewrite ^ (. *) http://top.yingjiesheng.com$1;
- Break
- }
Domain name Mirror to
- Server
- {
- Listen 80;
- server_name mirror.c1gstudio.com;
- Index index.html index.htm index.php;
- root/opt/lampp/htdocs/www;
- Rewrite ^/(. *) http://www.c1gstudio.com/$1 last;
- Access_log off;
- }
A subdirectory is used as a mirror to
- Location ^~/zhaopinhui {
- Rewrite ^.+ http://zph.c1gstudio.com/last;
- Break
- }
Discuz Ucenter Home (uchome) rewrite
- Rewrite ^/(space|network)-(. +) \.html$/$1.php?rewrite=$2 last;
- Rewrite ^/(space|network) \.html$/$1.php last;
- Rewrite ^/([0-9]+) $/space.php?uid=$1 last;
Discuz 7 Rewrite
- Rewrite ^ (. *)/archiver/((Fid|tid)-[\w\-]+\.html) $ $1/archiver/index.php?$2 last;
- Rewrite ^ (. *)/forum-([0-9]+)-([0-9]+) \.html$ $1/forumdisplay.php?fid=$2&page=$3;
- Rewrite ^ (. *)/thread-([0-9]+)-([0-9]+) – ([0-9]+) \.html$ $1/viewthread.php?tid=$2&extra=page\%3d$4&page=$3 Last
- Rewrite ^ (. *)/profile-(USERNAME|UID)-(. +) \.html$ $1/viewpro.php?$2=$3 last;
- Rewrite ^ (. *)/space-(USERNAME|UID)-(. +) \.html$ $1/space.php?$2=$3 last;
- Rewrite ^ (. *)/tag-(. +) \.html$ $1/tag.php?name=$2 last;
Configure the domain name separately for discuz
- server_name bbs.c1gstudio.com news.c1gstudio.com;
- Location =/{
- if ($http _host ~ news\.c1gstudio.com$) {
- Rewrite ^.+ http://news.c1gstudio.com/forum-831-1.html last;
- Break
- }
- }
Discuz ucenter Avatar Rewrite optimization
- location ^~/ucenter {
- location ~. *\.php?$
- {
- #fastcgi_p Ass Unix:/tmp/php-cgi.sock;
- fastcgi_pass 127.0.0.1:9000;
- Fastcgi_index index.php;
- include fcgi.conf;
- }
-
- location/ucenter/data/avatar {
- log_not_found off;
- Access_log off;
- Location ~/(. *) _big\.jpg$ {
- error_page 404/ucenter/images/noavatar_big.gif;
- }
- location ~/(. *) _middle\.jpg$ {
- error_page 404/ucenter/images/noavatar_middle.gif;
- }
- location ~/(. *) _small\.jpg$ {
- error_page 404/ucenter/images/noavatar_small.gif;
- }
- expires;
- break;
- }
- }
Jspace rewrite
- Location ~. *\.php?$
- {
- #fastcgi_pass Unix:/tmp/php-cgi.sock;
- Fastcgi_pass 127.0.0.1:9000;
- Fastcgi_index index.php;
- Include fcgi.conf;
- }
- Location ~* ^/index.php/
- {
- Rewrite ^/index.php/(. *)/index.php?$1 break;
- Fastcgi_pass 127.0.0.1:9000;
- Fastcgi_index index.php;
- Include fcgi.conf;
- }