この記事でわかること
dockerにて、Apacheのmod_rewriteの設定を行い、リクエストするURLをスマートにする方法。
どんなURLを指定されても、index.phpを介してコントローラへ処理を引き渡すようにする方法。
経緯
REST APIを試そうとしたが、URLの指定方法が気に入らなかった。
処理hoge
を呼び出すとき、以下のようにURLを指定させたかった。
やめたかったURL表記
https://localhost/api.php?action=hoge
やりたかったURL表記
https://localhost/api/hoge
解決策
1.モジュールを入れる
debian系OSが元になっているDocker Imageの場合、このコマンドでrewriteモジュールを有効化する必要があるそうです。
a2enmod rewrite
2.apache設定ファイルを編集
/etc/apache2/sites-available/000-default.conf
を編集。
以下を<VirtualHost></VirtualHost>
内に追加。
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
3..htaccessを編集
/var/www/html
の.htaccess
を編集します。(なければ作成します。)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^api/(.*)$ index.php
</IfModule>
この設定をすることで、https://localhost/api/
で始まるURLで指定されたリクエストは、すべてindex.php
を実行するようになりました。
あとは、index.php
で、$_SERVER['REQUEST_URI']
でとってきたURL情報を/
で区切るなりなんなりし、パラメータとして取り出せばいいのかな。
(この方法を使うと$_SERVER['PATH_INFO']
は使えなくなるらしい。)
その他
Dockerで行う場合は、Dockerfileにコマンドを記述するなり、設定ファイルをビルド時に配置させたりして何とかする。
参考