質問: apacheからnginxへの引っ越しをしています。 apache時代には、mod_rewriteを使い、.htaccess に下記のような変換をしていました。 ``` RewriteRule ^city/([0-9A-Za-z]+)/([0-9A-Za-z]+)\/$ city.php?a2_pre_id=$1&a4_city_id=$2 [L] ``` これにより http://example.com/city/13/13102/ のリンクを踏むと http://example.com/city.php?pre_id=13&city_id=13102 のPHPの結果を拾ってきます。 この場合、ホームページに記載するURLは http://example.com/city/13/13102/ そこを踏んだ場合の、ブラウザに表示されるURLも同様となります。 http://example.com/city/13/13102/ nginxのrewriteを使って同様のことを行いました。 Config Fileへの記載内容は下記としました。 ``` rewrite ^/city/(.*)/(.*)/$ /city.php?a2_pre_id=$1&a4_city_id=$2 permanent; ``` これにより http://example.com/city/13/13102/ のリンクを踏むと http://example.com/city.php?pre_id=13&city_id=13102 のPHPの結果を拾ってきます。 ホームページに記載するリンクのURLは http://example.com/city/13/13102/ で変わりはありません。 しかし、そのリンクを踏んだ場合、ブラウザに表示されるURLが、 http://example.com/city.php?pre_id=13&city_id=13102 と、PHPがそのまま表示されてしまうことがわかりました。 これでは、折角のrewriteが台無しです。 【質問】 nginxでのrewrite時のブラウザに表示されるURLを http://example.com/city/13/13102/ にする方法ばありませんでしょうか? よろしくお願いいたします。
回答: `permanent` フラグを付けると Redirect (応答コード 301)になります。 permanent フラグを付けない、かつ、書き換え後が http://, https:// などで始まっていなければ、ブラウザの URL はそのままで、書き換え後のコンテンツが見えると思います。