Appearance
Rewrite模块
Rewrite模块用于URL重写,实现URL重定向和重写。
基本配置
基本重写
nginx
rewrite ^/old/(.*)$ /new/$1 permanent;条件重写
nginx
if ($request_uri ~* "^/old/(.*)$") {
rewrite ^/new/$1 permanent;
}完整配置
生产环境配置
nginx
server {
listen 80;
server_name www.example.com;
# 重定向到HTTPS
return 301 https://$server_name$request_uri;
# 重写URL
rewrite ^/old/(.*)$ /new/$1 permanent;
# 去掉www
if ($host ~* ^www\.(.*)$) {
set $host_without_www $1;
rewrite ^(.*)$ http://$host_without_www$1 permanent;
}
}常用指令
rewrite
nginx
rewrite regex replacement flag;说明:
- regex:正则表达式
- replacement:替换字符串
- flag:标志
标志:
last:停止处理当前规则,重新开始搜索break:停止处理当前规则redirect:302临时重定向permanent:301永久重定向
if
nginx
if (condition) {
...
}说明:
- 条件判断
- 支持多种条件
常用场景
HTTP跳转HTTPS
nginx
server {
listen 80;
server_name www.example.com;
return 301 https://$server_name$request_uri;
}去掉www
nginx
server {
listen 80;
server_name www.example.com example.com;
if ($host ~* ^www\.(.*)$) {
set $host_without_www $1;
rewrite ^(.*)$ http://$host_without_www$1 permanent;
}
}添加www
nginx
server {
listen 80;
server_name example.com;
return 301 http://www.example.com$request_uri;
}URL重写
nginx
rewrite ^/old/(.*)$ /new/$1 permanent;去掉尾部斜杠
nginx
rewrite ^(.+)/$ $1 permanent;添加尾部斜杠
nginx
rewrite ^(.*[^/])$ $1/ permanent;完整示例
生产环境配置
nginx
server {
listen 80;
server_name example.com www.example.com;
# HTTP跳转HTTPS
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# 去掉www
if ($host ~* ^www\.(.*)$) {
set $host_without_www $1;
rewrite ^(.*)$ https://$host_without_www$1 permanent;
}
root /var/www/html;
index index.html;
# URL重写
rewrite ^/old/(.*)$ /new/$1 permanent;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}常见问题
重写循环
原因: 重写规则配置错误
解决: 检查重写规则
nginx
rewrite ^/old/(.*)$ /new/$1 permanent;重写不生效
原因: 正则表达式错误
解决: 检查正则表达式
nginx
rewrite ^/old/(.*)$ /new/$1 permanent;总结
Rewrite模块的关键点:
- rewrite:URL重写
- if:条件判断
- 标志:last、break、redirect、permanent
- 常用场景:HTTP跳转HTTPS、去掉www、URL重写
合理配置Rewrite模块,实现URL重定向和重写。