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