URL重写是Nginx中一个强大的功能,允许你修改客户端请求的URL。下面详细介绍如何使用Nginx的URL重写功能。
URL重写主要通过rewrite
指令实现:
rewrite regex replacement [flag];
regex
:正则表达式,匹配原始URLreplacement
:替换字符串flag
:可选标志,控制重写行为last
:停止处理当前重写规则,用新URL重新匹配locationbreak
:停止处理当前重写规则,继续处理其他指令redirect
:返回302临时重定向permanent
:返回301永久重定向rewrite ^/oldpath$ /newpath permanent;
rewrite ^/user/(.*)$ /profile.php?user=$1 last;
rewrite ^/([^/]+)/?$ /$1.php last;
rewrite ^ https://$host$request_uri? permanent;
if ($host != "www.example.com") {
rewrite ^/(.*)$ http://www.example.com/$1 permanent;
}
location /blog/ {
rewrite ^/blog/(.*)$ /news/$1 permanent;
}
避免过多重定向:过多的重定向会影响性能
测试正则表达式:使用在线工具测试你的正则表达式
考虑性能:复杂的正则表达式可能影响性能
使用try_files:对于静态文件,try_files通常比rewrite更高效
server {
listen 80;
server_name example.com;
# 重定向非www到www
if ($host = 'example.com') {
rewrite ^/(.*)$ http://www.example.com/$1 permanent;
}
# 去除.php扩展名
location / {
try_files $uri $uri/ @extensionless-php;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
# 旧URL重定向
location /old/ {
rewrite ^/old/(.*)$ /new/$1 permanent;
}
# 强制HTTPS
if ($scheme = http) {
rewrite ^ https://$host$request_uri? permanent;
}
}
rewrite_log on;
开启重写日志curl -v
测试重定向行为希望这个指南能帮助你掌握Nginx的URL重写功能!