常用的nginx rewrite重寫規(guī)則有以下幾種:
將所有請(qǐng)求重定向到一個(gè)新的URL:rewrite ^/(.*)$ http://newdomain.com/$1 permanent;
將只有特定路徑的請(qǐng)求重定向到新的URL:rewrite ^/old-path/(.*)$ /new-path/$1 permanent;
將HTTP請(qǐng)求重定向到HTTPS:rewrite ^/(.*)$ https://$host/$1 permanent;
將URL中的查詢字符串參數(shù)添加到重定向后的URL中:rewrite ^/path/(.*)$ /path?param=$1 last;
將URL中的查詢字符串參數(shù)重寫為路徑參數(shù):rewrite ^/path\?param=(.*)$ /path/$1 last;
將URL中的路徑參數(shù)重寫為查詢字符串參數(shù):rewrite ^/path/(.*)$ /path?param=$1 last;
防止訪問(wèn)以點(diǎn)開頭的隱藏文件或目錄:rewrite /\.([^./]+)$ /$1 last;
防止訪問(wèn)未包含文件擴(kuò)展名的文件:rewrite ^/path/(.*)$ /path/$1.html last;
防止訪問(wèn)未包含文件擴(kuò)展名的目錄:rewrite ^/path/(.*)$ /path/$1/ last;
將請(qǐng)求重寫到指定路徑下的文件:rewrite ^/path/(.*)$ /new-path/$1 last;
將請(qǐng)求重寫到另一個(gè)服務(wù)器的路徑:rewrite ^/path/(.*)$ http://newdomain.com/$1 last;
將請(qǐng)求重寫到另一個(gè)服務(wù)器的路徑,并保持原始的URI和查詢參數(shù):rewrite ^/path/(.*)$ http://newdomain.com/$1$is_args$args last;
僅當(dāng)請(qǐng)求的主機(jī)名為特定值時(shí)進(jìn)行重寫:if ($http_host = "old.domain.com") { rewrite ^/(.*)$ http://new.domain.com/$1 permanent; }
僅當(dāng)請(qǐng)求的方法為POST時(shí)進(jìn)行重寫:if ($request_method = POST) { rewrite ^/(.*)$ /new-path/$1 last; }
僅當(dāng)請(qǐng)求的URL不包含特定字符串時(shí)進(jìn)行重寫:if ($request_uri !~ "allowed-string") { rewrite ^/(.*)$ /new-path/$1 last; }
請(qǐng)注意,在使用rewrite規(guī)則時(shí),應(yīng)謹(jǐn)慎使用if語(yǔ)句,因?yàn)樗赡軐?dǎo)致配置復(fù)雜性和性能問(wèn)題。