蒹葭苍苍,白露为霜。
所谓伊人,在水一方。

Nginx的rewrite应用详解

Rewrite主要的功能是实现URL重写,Nginx 的 Rewrite 规则采用 PCRE Perl 兼容正则表达式的语法进行规则匹配,如相使用 Nginx 的 Rewrite 功能,在编译Nginx 前要编译安装 PCRE 库。

Nginx使用rewrite
rewrite ( 可用于: server,location,if ) ## 重写 URL ,或修改字符串。重写 URL 只对相对路径有效,如想对主机名,要使用 if 语句。

if ($host ~* www.(.*)) {  set $host_without_www $1;  rewrite ^(.*)$ http://$host_without_www$1 permanent; } 
## 如果替换串以 http:// 开头,将会采用 301 或 302 跳转进行 URL 重定向。
rewrite ^/feed/$ http://feed.shunz.net last;

last 相当于Apache里的[L]标记,表示完成rewrite,不再匹配后面的规则

break ( 可用于: server,location,if ) ## 本条规则匹配完成后,终止匹配,不再匹配后面的规则

如:rewrite ^/b/(.*).html /play.php?video=$1 break;

redirect 返回302临时重定向,浏览器会显示跳转后的URL地址

permanent 返回301永久重定向,浏览器会显示跳转后的URL地址

last/break用来实现URL重写,浏览器地址栏的URL不变,但在服务器端访问的路径发生了变化。

redirect/permanent实现URL跳转,浏览器地址栏URL会显示跳转后的URL。

使用 alias 指令时必须用 last 标记 ,使用 proxy_pass 指令时要用 break 表示。last 标记在本条 rewrite 规则执行完毕后,会对其所在 server{….}标签重新发起请求,而 break 标记则在本条规则匹配完成后,终止匹配。

location /cms/ {  proxy_pass http://test.abc.com;  rewrite "^/cms/(.*).html$" /cms/index.html break; } 
## 这条规则如果使用 last 会导致死循环。

## 一般在根 location 中(即 location / {....})或直接在 server 标签编写 rewrite 规则,推荐使用 last 标记,
在非根 location 中 (即 location /cms/ {...}),则使用 break 标记。

Nginx $document_uri参数的使用

$document_uri 表示访问的url 现在我的需求是,访问 www.abc.com 请求到 www.abc.com/abc/

在nginx配置文件中加入

if ($document_uri !~ 'abc') { rewrite ^/(.*)$ http://www.abc.com/abc/$1 permanent; }

而不是单独加一句 rewrite ^/(.*)$ http://www.abc.com/abc/$1 permanent;

如果只加rewrite 规则,而不限定条件,那么会造成死循环。

赞(0) 打赏
未经允许不得转载:酷居科技 » Nginx的rewrite应用详解

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

锦瑟无端五十弦,一弦一柱思华年

酷居科技联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏