Nginx 的rewrite
指令用于根据特定的规则重写 URL,常用于实现 URL 重定向、URL 规范化和负载均衡等,以下是一些常见的rewrite
规则及其示例:
基本重写规则
示例:将/old-path
重写为/new-path
server { listen 80; server_name example.com; location / { rewrite ^/old-path$ /new-path permanent; } }
在这个例子中,当用户访问http://example.com/old-path
时,会被永久重定向到http://example.com/new-path
。
使用正则表达式进行重写
示例:将所有以.php
结尾的请求重写为.html
server { listen 80; server_name example.com; location / { rewrite ^(.*)\.php$ $1.html last; } }
这个规则会将http://example.com/index.php
重写为http://example.com/index.html
。
条件重写
示例:仅在特定条件下重写 URL
server { listen 80; server_name example.com; location / { if ($request_uri ~* "^/old-path") { rewrite ^/old-path$ /new-path permanent; } } }
这个配置会在请求 URI 匹配/old-path
时,将其重写为/new-path
。
移除 URL 中的特定部分
示例:移除 URL 中的www
前缀
server { listen 80; server_name example.com www.example.com; location / { rewrite ^/(.*)$ http://example.com/$1 permanent; } }
这个规则会将http://www.example.com/anything
重写为http://example.com/anything
。
动态 URL 重写
示例:将查询参数转换为路径参数
server { listen 80; server_name example.com; location / { rewrite ^/search\?q=(.*)$ /results/$1 break; } }
这个规则会将http://example.com/search?q=keyword
重写为http://example.com/results/keyword
。
基于文件类型的重写
示例:将所有图片请求重写到一个统一的处理脚本
server { listen 80; server_name example.com; location ~* \.(jpg|jpeg|png|gif)$ { rewrite ^/images/(.*)$ /image_handler.php?file=$1 last; } }
这个规则会将http://example.com/images/photo.jpg
重写为http://example.com/image_handler.php?file=photo.jpg
。
防止目录遍历攻击
示例:阻止访问上级目录的文件
server { listen 80; server_name example.com; location / { rewrite ^/\.\.(/.*)?$ /forbidden.html last; } }
这个规则会阻止任何试图访问上级目录的请求,并将其重定向到/forbidden.html
。
强制 HTTPS
示例:将所有 HTTP 请求重写为 HTTPS
server { listen 80; server_name example.com; location / { rewrite ^ https://$host$request_uri? permanent; } }
这个规则会将所有 HTTP 请求重写为 HTTPS 请求。
这些示例展示了 Nginxrewrite
指令的一些常见用法,通过灵活运用这些规则,可以实现复杂的 URL 重写和重定向逻辑。