使用HTTP/1.1 301永久移动标题的Nginx重定向URL

时间:2020-01-09 10:45:58  来源:igfitidea点击:

如何使用Nginx反向代理使用干净的URL http://example.com/store/view/product/foo重定向旧的丑陋URL(例如http://example.com/store/view.jsp?product=foo)?
您需要在Nginx Web服务器下使用HttpRewriteModule。
该模块可以使用正则表达式(PCRE)更改URI,并根据变量重定向和选择配置。
语法如下,以根据正则表达式和替换字符串替换URI。

rewrite regex replacement flag

请注意,指令是按照配置文件中出现的顺序执行的。
这是相同的示例配置:

# rewrite urls
rewrite ^/store/view/product/(.*) /store/view.jsp?product=  permanent;
## Uncomment the following line to redirect old urls with HTTP/301 ##
# rewrite "^/store/view.jsp?product=(.*)$" ^/store/view/product/ permanent;

这是try_files指令的另一个示例,该指令按顺序检查文件是否存在,并返回找到的第一个文件:

### Add inside server { ... } directive block ###
### Only works with Nginx version 0.7.65+ ###
        location / {
                index store.php;
                try_files $uri $uri/ @ourcleanurls;
        }
        # rewrite urls #
        location @ourcleanurls {
                rewrite ^/media/(.*) /includes/cache/helper.php?m=&images=1 last;
                rewrite ^/css/(.*) /includes/cache/helper.php?m=&css=1 last;
                rewrite ^/js/(.*) /includes/helper.php?m=&js=1&c=false last;
                rewrite ^/(.*) /store.php?pid= last;
        }

您需要使用以下命令重新加载Nginx服务器:

# /usr/local/nginx/sbin/nginx -s reload

如何测试新变化?

您可以使用curl命令测试新更改,包括HTTP/1.1 301 Moved消息:

$ curl -I http://example.com/store/view/product/foo
$ curl -I http://example.com/store/view.jsp?product=foo