2012年6月8日金曜日

mod_rewriteとurl rewrite

先ほどのサンプル(FuelPHPを試してみた)はとりあえず動かしたってかんじですが
URLに「public/index.php」がついてたんでこれを取り除いてhttp://localhost/fp-sampleでアクセスできるように。

これもドキュメントに載ってる通りそのままですが、ルートフォルダ(ここでは/fp-sampleの下)に.htaccessを作成して以下を記述します。
※.htaccessはpublicフォルダに入ってるんでそれを流用できます。
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /fp-sample/public
    RewriteRule ^(/)?$ index.php/$1 [L]
    RewriteCond ${REQUEST_FILENAME} !-f
    RewriteCond ${REQUEST_FILENAME} !-d
    RewriteRule ^(.*)?$ index.php/$1 [L]
</IfModule>

ドキュメントでは「RewriteBase /public」となっていますがここは環境に合わせて変更します。
これだけです。
本来であればpublicをウェブサーバのルートにおいてその他のファイルはルート外にするのが一般的みたいですがこういうやり方もあるみたいです。

ちなみにドキュメントにはApacheの環境しか載ってませんでしたがWindowsのIISでも同じようなことはできました。
※ただしIISにはmod_rewriteはないので別途URL Rewriteをインストールする必要があります。

IISの管理画面を開いてURL Rewriteの画面を開きます。
右のメニューから「Import Rules...」をクリックして以下の画面を開きます。
先に.htaccessファイルを作成していればそれをインポートすることもできます。
下のRewrite rulesに直接書き込んでも問題ありません。
(というかインポートするとここに入ります)
そのままだと上のようにエラーが表示されてしまいますので修正します。
RewriteEngine on
RewriteRule ^(/)?$ /fp-sample/public/index.php/$1 [L]
RewriteCond ${REQUEST_FILENAME} !-f
RewriteCond ${REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /fp-sample/public/index.php/$1 [L]

こんなかんじ。
ほとんど変わりませんがURL RewriteではRewriteBaseがサポートされていないみたいなんで上のような書き方で動きます。

IISで動かすとかいうのは稀でしょうが一応動いたんでメモ程度に。。。



0 件のコメント:

コメントを投稿