您的位置:首页 >怎样在Nginx中配置URL重写
发布于2026-05-03 阅读(0)
扫一扫,手机访问
在Nginx的世界里,想让URL按照你的心意跳转或变形,rewrite指令绝对是你的得力助手。今天,咱们就来聊聊如何配置它,让它乖乖听话。下面是一些核心的配置方法和实例,帮你快速上手。
先从最简单的场景说起。比如,你想把用户访问/oldpage的请求,统统引导到/newpage去。这个需求很常见,配置起来也相当直接:
server {
listen 80;
server_name example.com;
location /oldpage {
rewrite ^/oldpage$ /newpage permanent;
}
}
当然,实际需求往往更复杂。这时候,正则表达式就能大显身手了。举个例子,如果你需要把所有以/category/开头的URL,都重写到/archive.php?cat=$1这个动态页面上,可以这么写:
server {
listen 80;
server_name example.com;
location /category/(.*) {
rewrite ^/category/(.*)$ /archive.php?cat=$1 last;
}
}
如今,全站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 / {
# 你的其他配置
}
}
有些时候,重写逻辑需要和静态文件检查配合。比如,先看看请求的文件是否存在,如果不存在,再交给后端处理(这在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;
}
}
更进一步,你还可以为重写加上条件判断。经典的用法是:只有当用户请求的文件在磁盘上确实找不到时,才触发重写规则,将请求转发给前端控制器(如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 -t命令测试一下,确保没有语法错误。systemctl restart nginx或nginx -s reload命令来重启服务,让改动生效。掌握以上这些步骤和示例,相信你就能在Nginx中游刃有余地驾驭URL重写了。实践出真知,多动手试试吧。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9