Cakephp htaccessでのRewrite設定
Cakephpを使うときプロジェクトを配置しようとして、悩んだことを書きます。
ドキュメントルートにフォルダを作成し、その中にindex.phpを置きたいと考えました。そのとき、htaccessファイルの設定に困りました。
例として、ドキュメントルートに「project」フォルダを作成し、index.phpファイルを置く場合を書きます。
1.index.phpを格納
ドキュメントルートに「project」フォルダを作成し、ダウンロードしたCakephpに含まれているindex.phpファイルを置きます。
2.htaccessを作成
コントローラ名をURLから取得するため、Rewriteを設定をします。Rewriteを設定するために、htaccessを作成しindex.phpと同じディレクトリに配置します。
以下、htaccessの内容です。
1.書き換えを有効にします
RewriteEngine On
2.フォルダの場所を指定します
RewriteBase /project
3.書き換えの条件を指定します
RewriteCond %{REQUEST_FILENAME} !-f
(%{REQUEST_FILENAME}が存在するファイル名の場合はRewriteしません。)
RewriteCond %{REQUEST_FILENAME} !-d
(%{REQUEST_FILENAME}が存在するディレクトリ名の場合はRewriteしません。)
4.書き換え内容を指定します。
書き換えの条件を満たし、1つ目の正規表現に一致した場合2つ目に書き換えます。
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
[QSA]は「Query String Append」の略で、[QSA]を指定すると、%{QUERY_STRING}が引数として付きます。上の場合、 index.php?url=$1&%{QUERY_STRING} となるそうです。
[L]を指定すると、この後RewriteRuleを使って書き換えません。
たとえば、「http://ドメイン/project/test/view」(コントローラ名がtest、メソッド名がview)とアクセスした場合、書き換え後のurlパラメータには「test/view」が入ります。
Cakephpの導入のために、少しだけRewriteについて学びました。まだまだRewriteについて勉強しないといけないと感じています。また時間があるときに、Rewriteをもっと勉強します。
参考
(参考にさせていただきました。わかりやすかったです。感謝します。)