nginx rewrite常用示例
相信大家在日常運維工作中如果你用到nginx作為前端反向代理服務器的話,你會對nginx的rewrite又愛又恨,愛它是因為你搞定了它,完成了開發人員的跳轉需求後你會覺得很爽,覺得真的很強大,恨它是因為當一些稀奇古怪跳轉的需求時候你會沒有頭緒、百般調試、上網求神拜佛都搞不定的時候真是想死的心都有了,當然網上也有很多nginx rewrite的經典示例,但是我感覺對我的工作都沒有太大的幫助。下面是我工作中遇到的一些rewrite示例。提供給大家分享。
一、訪問http://www.abc.com正常,現在需要訪問abc.com,直接跳轉到http://www.abc.com。
- server {
- listen 80;
- server_name abc.com;
- access_log off;
- rewrite (.+) $scheme://www.$host$1 permanent;
- }
二、如果你們域名是http://www.abc.com,現在想換一個域名http://www.def.com了,又不想失去之前域名的訪問量,需要配置跳轉。
首先需要在你的server_name裡面把www.abc.com和www.def.cn都寫上。
然後做如下配置:
- location / {
- if ($host = 'www.abc.com')
- {
- rewrite ^/(.*)$ http://www.def.com/$1 permanent;
- }
- }
三、跳轉維護頁面,比如今天維護,想掛一個維護頁面,希望除某些特定的IP地址能正常訪問,因為需要測試。其余所以的IP地址都是訪問維護頁面,這個需求我之前好像寫過,但是今天寫的有點不一樣。在server裡面添加如下內容:
- set $rewrite true;
- if ($remote_addr = "xxx.xxx.xxx.xxx") {
- set $rewrite false;
- }
- if ($rewrite = true) {
- rewrite (.+) http://www.abc.com/maintenance.html;
- }
- location = /maintenance.html {
- root /var/vhost;
- }
四、比如現在你的域名是http://bbs.abc.com,現在將這個域名下面的帖子訪問都跳轉到http://www.abc.com/bbs,注意跳轉後的參數也要保持一致。
比如:http://bbs.abc.com/post/addpost/913.shtml跳轉到http://www.abc.com/bbs/post/addpost/913.shtml
- location /post {
- rewrite (.+) http://www.abc.com/bbs$1 permanent;
- }
五、基於uri的跳轉
- if ($request_uri ~* ^/note\.php\?product_code=(.*)$) {
- rewrite (.*) http://www.abc.com permanent;
- }
- if ($request_uri ~ ^/forum-(140|141|142|143|144|145|150|151|152|153|154|155|156|157|158|159|200|222|223|224|225|226|227|228)-(\d+).html$) {
- rewrite (.*) http://www.abc.com/list permanent;
- }
六、基於目錄下面文件的跳轉
- location ~* /upload/.*\.php$ {
- return 404;
- }
七、最普通的url到url跳轉
- location ~* ^/ab/maintain/main.html {
- rewrite (.+) http://www.abc.com/maintain/main.html permanent;
- }
雖然例子舉不全,可能還有一些其它更好的跳轉示例,以後再補充。有不對的地方歡迎大家拍磚。