次のサンプルは、URL に関係なく、見た目が悪いすべてのリクエスト (リクエストされ?
たファイル名に含まれていると定義され、リクエストのようにエンコードされているものとして定義されています%3F
) を、見た目があまり良くないものにリダイレクトします。
(他の場所で正しくアドバイスされているように、そもそもこれらの間違った形式のリンクを取得するべきではないことに注意してください。そのため、最後の手段として使用してください — 他の方法で間違った形式のリンクを修正できず、それがわかっている場合にのみ使用してください。そのような要求は有効なエージェントによって試行されます。)
server {
listen [::]:80;
server_name localhost;
rewrite ^/([^?]*)\?(.*)$ /$1?$2? permanent;
location / {
return 200 "id is $arg_id\n";
}
}
301 Moved Permanently
これはどのように機能するかの例です — 見た目が間違っているリクエストに遭遇した場合、正しいと思われるレスポンス ヘッダーを持つレスポンスで修正の試みが行われLocation
、ブラウザは新しく提供された場所にリクエストを自動的に再発行します:
opti# curl -6v "http://localhost/default/Site%3Fid%3D13"
* About to connect() to localhost port 80 (#0)
* Trying ::1...
* connected
* Connected to localhost (::1) port 80 (#0)
> GET /default/Site%3Fid%3D13 HTTP/1.1
> User-Agent: curl/7.26.0
> Host: localhost
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.4.1
< Date: Wed, 15 Jan 2014 17:09:25 GMT
< Content-Type: text/html
< Content-Length: 184
< Location: http://localhost/default/Site?id=13
< Connection: keep-alive
<
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.4.1</center>
</body>
</html>
* Connection #0 to host localhost left intact
* Closing connection #0
適切に見えるリクエストに対しては、修正の試行は行われないことに注意してください。
opti# curl -6v "http://localhost/default/Site?id=13"
* About to connect() to localhost port 80 (#0)
* Trying ::1...
* connected
* Connected to localhost (::1) port 80 (#0)
> GET /default/Site?id=13 HTTP/1.1
> User-Agent: curl/7.26.0
> Host: localhost
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.4.1
< Date: Wed, 15 Jan 2014 17:09:30 GMT
< Content-Type: application/octet-stream
< Content-Length: 9
< Connection: keep-alive
<
id is 13
* Connection #0 to host localhost left intact
* Closing connection #0