怎样在Nginx中配置URL重写
Nginx URL重写配置实战指南 在Nginx的世界里,想让URL按照你的心意跳转或变形,rewrite指令绝对是你的得力助手。今天,咱们就来聊聊如何配置它,让它乖乖听话。下面是一些核心的配置方法和实例,帮你快速上手。 1. 基本重写规则 先从最简单的场景说起。比如,你想把用户访问/oldpage
Nginx URL重写配置实战指南
在Nginx的世界里,想让URL按照你的心意跳转或变形,rewrite指令绝对是你的得力助手。今天,咱们就来聊聊如何配置它,让它乖乖听话。下面是一些核心的配置方法和实例,帮你快速上手。
1. 基本重写规则
先从最简单的场景说起。比如,你想把用户访问/oldpage的请求,统统引导到/newpage去。这个需求很常见,配置起来也相当直接:
server {
listen 80;
server_name example.com;
location /oldpage {
rewrite ^/oldpage$ /newpage permanent;
}
}
2. 使用正则表达式
当然,实际需求往往更复杂。这时候,正则表达式就能大显身手了。举个例子,如果你需要把所有以/category/开头的URL,都重写到/archive.php?cat=$1这个动态页面上,可以这么写:
server {
listen 80;
server_name example.com;
location /category/(.*) {
rewrite ^/category/(.*)$ /archive.php?cat=$1 last;
}
}
3. 重定向HTTP到HTTPS
如今,全站HTTPS几乎是标配。如何优雅地将所有HTTP流量无缝转向HTTPS呢?一个高效的配置方案是这样的:
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/ssl/certificate.pem;
ssl_certificate_key /path/to/ssl/private.key;
location / {
# 你的其他配置
}
}
4. 重写规则与try_files结合使用
有些时候,重写逻辑需要和静态文件检查配合。比如,先看看请求的文件是否存在,如果不存在,再交给后端处理(这在PHP等动态站点中很常见)。这时,try_files指令就派上用场了:
server {
listen 80;
server_name example.com;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
5. 重写规则与条件结合使用
更进一步,你还可以为重写加上条件判断。经典的用法是:只有当用户请求的文件在磁盘上确实找不到时,才触发重写规则,将请求转发给前端控制器(如index.php)。这通常借助if指令来实现:
server {
listen 80;
server_name example.com;
location / {
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php last;
}
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
注意事项
配置虽好,但有几个关键点必须牢记,否则很容易掉进坑里:
- 顺序很重要:Nginx处理配置是有顺序的,务必把你的重写规则放在正确的位置,避免被其他规则意外覆盖。
- 测试配置:在让新配置生效前,养成一个好习惯——先用
nginx -t命令测试一下,确保没有语法错误。 - 重启Nginx:修改完配置文件后,别忘记使用
systemctl restart nginx或nginx -s reload命令来重启服务,让改动生效。
掌握以上这些步骤和示例,相信你就能在Nginx中游刃有余地驾驭URL重写了。实践出真知,多动手试试吧。


































