wp.bmemo.pw

自分のための覚書・備忘録

【Nginx】 GETクエリ文字列を含んだURLをフォルダのように振る舞わせる

   

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInShare on TumblrPin on Pinterest

タイトルが日本語不自由

要するにこれがしたいんです。

に書き換えたいわけです。Apacheならmod_rewriteの設定方法がいろいろあったんですが、Nginxだといまいちパッとしない情報しかなかったので記事にしました。

 

GETクエリ文字列をrewriteする!

単純なサイトの場合、クエリ文字列はできるだけ隠したいんですよね。URLをリダイレクトする方法の一つに「rewrite」を使う手があります。

ですが、単純にリダイレクトしてしまうとブラウザのURLバーもリダイレクト先に変わっていまうわけです。

ユーザーには http://example.com/products/A1254/ でアクセスさせつつ、サーバー内部では http://example.com/products?id=A1254 として処理する


 

location 内で設定する

特定のディレクトリのみで動作させるようにlocation内で設定します

ロケーション「products」内で ^/products/英数字5文字 でアクセスしてきたら /products?id=英数字5文字 として処理します。ユーザ側はhttp://example.com/products/英数字5文字 でアクセスしています。

クエリ文字列付きでアクセスしてきた場合

rewriteの条件を入れ替えて 末尾をbreakからlastに変更しました。breakだと、rewrite実行後はURL評価されないのですが、lastはrewrite実行後、もう一度URLの評価が行われます。

つまり、クエリ付き(http://example.com/products?id=A1254)でアクセスしてきたら、URLを書き換えてリダイレクトする(http://example.com/products/A1254/)。末尾がlastなので書き換えられたURL(http://example.com/products/A1254/)は再評価されます。

再評価されるとhttp://example.com/products/A1254/ は内部的に(/products?id=A1254)としてrewriteされます。

php内で画面変遷時にはクエリ指定で飛ばして、nginx側でディレクトリ表記のURLに書き換えてもらうのもいいですね。


 - 未分類