nginxではある条件のrequest urlを、一定のurlに書き換えるというrewriteの機能を利用することが出来ます。
[root@nginx01 ~]# curl http://localhost/rewrite-test.html
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.9.12</center>
</body>
</html>
例えばrewrite-test.htmlというファイルはないので、アクセスしても404で返ります。
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
rewrite /rewrite-test.html index.html permanent;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
しかし、上記のような設定ファイルを作成したとします。
「rewrite /rewrite-test.html index.html permanent;」のところで、rewrite-test.htmlはindex.htmlに書き換えるように設定しています。
[root@nginx01 ~]# curl http://localhost/rewrite-test.html
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.9.12</center>
</body>
</html>
同じようにcurlコマンドでアクセスすると301が返ってきます。
ブラウザからはredirectされました。
time:2016-04-12T00:38:39+09:00 remote_addr:172.17.9.91 request:GET /rewrite-test.html HTTP/1.1 request_method:GET request_length:312 request_uri:/rewrite-test.html uri:/rewrite-test.html query_string:- status:301 bytes_sent:370 body_bytes_sent:185 referer:- useragent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 forwardedfor:- request_time:0.000 upstream_response_time:-
time:2016-04-12T00:38:39+09:00 remote_addr:172.17.9.91 request:GET /index.html HTTP/1.1 request_method:GET request_length:305 request_uri:/index.html uri:/index.html query_string:- status:200 bytes_sent:850 body_bytes_sent:612 referer:- useragent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 forwardedfor:- request_time:0.000 upstream_response_time:-
アクセスログ(ltsv形式)にもrewrite-test.htmlのアクセスが301で返ってくること
その後にindex.htmlにリダイレクトされることがわかります。
[root@nginx01 ~]# curl http://localhost/rewrite-test.html
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.9.12</center>
</body>
</html>
例えばrewrite-test.htmlというファイルはないので、アクセスしても404で返ります。
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
rewrite /rewrite-test.html index.html permanent;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
しかし、上記のような設定ファイルを作成したとします。
「rewrite /rewrite-test.html index.html permanent;」のところで、rewrite-test.htmlはindex.htmlに書き換えるように設定しています。
[root@nginx01 ~]# curl http://localhost/rewrite-test.html
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.9.12</center>
</body>
</html>
同じようにcurlコマンドでアクセスすると301が返ってきます。
ブラウザからはredirectされました。
time:2016-04-12T00:38:39+09:00 remote_addr:172.17.9.91 request:GET /rewrite-test.html HTTP/1.1 request_method:GET request_length:312 request_uri:/rewrite-test.html uri:/rewrite-test.html query_string:- status:301 bytes_sent:370 body_bytes_sent:185 referer:- useragent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 forwardedfor:- request_time:0.000 upstream_response_time:-
time:2016-04-12T00:38:39+09:00 remote_addr:172.17.9.91 request:GET /index.html HTTP/1.1 request_method:GET request_length:305 request_uri:/index.html uri:/index.html query_string:- status:200 bytes_sent:850 body_bytes_sent:612 referer:- useragent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 forwardedfor:- request_time:0.000 upstream_response_time:-
アクセスログ(ltsv形式)にもrewrite-test.htmlのアクセスが301で返ってくること
その後にindex.htmlにリダイレクトされることがわかります。
コメント