赞
踩
Nginx的rewrite
指令提供了非常灵活的方式来重写或重定向客户端的请求URI。以下是一些基本的实战例子来说明如何在Nginx中配置rewrite
规则:
原始情况:
用户请求 http://www.example.com/index.php?id=123
期望转换:
转换为 http://www.example.com/article/123
location / {
rewrite ^/index.php?id=(\d+)$ /article/$1 permanent;
}
在这个例子中,正则表达式 ^/index.php?id=(\d+)$
匹配以 /index.php?id=
开始且后面跟着数字的请求,并捕获这个数字。$1
在重写目标中引用了捕获的数字,然后使用 permanent
参数发起一个301永久重定向。
原始情况:
用户通过HTTP请求 http://www.example.com
期望转换:
强制重定向到HTTPS版本 https://www.example.com
server { listen 80; server_name www.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name www.example.com; # SSL 配置部分省略... location / { # 此处是HTTPS服务的其他配置 } }
在这个例子中,我们没有直接使用rewrite
,而是使用return
指令发送一个301重定向响应给客户端,强制其使用HTTPS。
原始情况:
用户请求 http://www.example.com/blog/post1
期望内部处理:
实际请求后端的 /app/posts.php?slug=post1
而不改变用户的可见URL
location /blog/ {
rewrite ^/blog/(post\d+)/$ /app/posts.php?slug=$1 last;
}
location /app/ {
try_files $uri $uri/ =404;
# 这里是PHP-FPM或者其他后端服务器的配置
}
这里使用了 last
标志,表示完成当前rewrite循环并继续执行后续的location处理。这样,虽然用户看到的是 /blog/post1
,但Nginx会把请求转发给 /app/posts.php
,并传递相应的参数。
rewrite
规则可以在server
、location
或if
上下文中使用。break
标志停止当前rewrite循环。last
标志继续执行新的location查找。permanent
或redirect
发起外部重定向,并返回301或302状态码给客户端。break
、last
等标志控制流程。rewrite_log
可以开启详细重写日志记录,有助于调试规则。根据实际情况调整这些例子以适应您的具体需求。在编写规则时,务必考虑性能和正则表达式的效率。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。