apacheのmod_rewriteとnginxのrewriteの違い

December 7, 2012,
tags: apache nginx


このエントリーをはてなブックマークに追加

よくapacheのmod_rewriteつかってurlを書き換えるときにこんな感じの指定するときってあると思います。
たしかcakePHPのmod_rewriteって以下の感じですね。

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

じゃあこれと同じようなことをnginxでやるとなると、以下のように書きます。
てかぐぐったサンプルとか見るとこうなってた。

rewrite ^(.+)$  index.php?url=$1 last;

一見同じような指定なので、$1に入ってくる値が一緒だと思っていまいますが、実は違ったりします。。。
urlのパラメータがapacheの場合だと以下のようになります。

index.php

<?php
var_dump($_GET['url']);

apacheの場合

array (size=1)
  'url' => string 'hoge/fuga' (length=9)

nginxの場合

array (size=1)
  'url' => string '/hoge/fuga' (length=10)

urlのパラメータの頭に/がつくかつかないかの違いですが、今のプロジェクトではこの差で影響がでてしまっていてはまっていました。
nginxの場合は頭に/がついてします・・・

じゃあこれをどう解決しようかってところですが、nginxのrewriteの設定を以下のようにすれば大丈夫です。

rewrite ^/(.+)$  index.php?url=$1 last;

こういう微妙な違いって結構やっかいですね・・・勘弁してほしいです。。。

全然関係ないですが、MacBook Air買いました。なかなか快適です。やっぱ薄いPCっていいです!!とってもいい感じです!!

comments powered by Disqus