CakePHPをWindows7 64bit IISで動かす

CakePHPをIIS、つまり手持ちの環境にセットアップしようとした。自分はaspなどのプログラムもあるので、http://localhost/と書いた時にASPもPHPも動くようにしておきたいのだ。

 

だが、URLの書き換えがうまくいかなかった。CakePHPのCookbookを見ながらインストールするのだが、なかなかうまくいかない。

要するにApacheのmod_rewriteなる仕組みを、IISはIIS Rewrite Module 2というプログラムをインストールすることで実現しており、.htaccessに指定された内容をweb.configファイルに設定することでほぼ同様の機能が実現できる、ということのようだ。

ウェブの物理パスの直下にCakePHPのフォルダを丸ごとコピーしてhttp://localhost/CakePHP/
のようなアドレスで運用したいわけだが、
1.CakePHPフォルダまでは表示されても、CakePHP/hello/みたいなアドレスが表示されない。
2.CakePHP/helloが表示されても、CakePHPが表示されない。
3.アドレスの最後をCakePHP/のようにスラッシュを入れても入れなくても同じリンクが表示されるため、相対リンクが違うサイトを指してしまう
云々でこれならうまくいくということにならない。

 

最終的にこういうweb.configになった。

<?xml version=”1.0″ encoding=”UTF-8″?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<!–まず、末尾に拡張子がなくてスラッシュがない場合はつける–>
<rule name=”remove slash” stopProcessing=”false”>
<match url=”^(.*)$” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll” trackAllCaptures=”false”>
<add input=”{URL}” pattern=”/$” ignoreCase=”false” negate=”true” />
<add input=”{URL}” pattern=”\.[^/\.]+$” ignoreCase=”false” negate=”true” />
</conditions>
<action type=”Redirect” url=”{R:1}/” redirectType=”Permanent” />
</rule>
<!–http://localhost/CakePHP/アドレスをapp/webrootに書き換える–>
<rule name=”インポートされた規則 1″ stopProcessing=”true”>
<match url=”^$” ignoreCase=”false” />
<action type=”Rewrite” url=”app/webroot/” />
</rule>
<!–http://localhost/CakePHP/ほにゃらら/アドレスをapp/webroot/ほにゃららに書き換える–>
<rule name=”Redirect static resources” stopProcessing=”true”>
<match url=”^(ico|img|css|files|js)(.*)$” />
<conditions logicalGrouping=”MatchAll” trackAllCaptures=”false” />
<action type=”Rewrite” url=”app/webroot/{R:1}{R:2}” appendQueryString=”false” />
</rule>
<rule name=”Imported Rule 1″ stopProcessing=”true”>
<match url=”^(.*)$” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll” trackAllCaptures=”false”>
<add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” negate=”true” />
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
</conditions>
<action type=”Rewrite” url=”index.php?url={R:1}” appendQueryString=”true” />
</rule>
<rule name=”Imported Rule 2″ stopProcessing=”true”>
<match url=”^$” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll” trackAllCaptures=”false” />
<action type=”Rewrite” url=”/” />
</rule>
<rule name=”Imported Rule 3″ stopProcessing=”true”>
<match url=”(.*)” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll” trackAllCaptures=”false” />
<action type=”Rewrite” url=”/{R:1}” />
</rule>
<rule name=”Imported Rule 4″ stopProcessing=”true”>
<match url=”^(.*)$” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll” trackAllCaptures=”false”>
<add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” negate=”true” />
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
</conditions>
<action type=”Rewrite” url=”index.php?url={R:1}” appendQueryString=”true” />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください