Posted at

Apacheのmod_rewrite設定メモ

More than 1 year has passed since last update.


この記事でわかること

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>内に追加。


000-default.conf

    <Directory /var/www/html>

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>


3..htaccessを編集

/var/www/html.htaccessを編集します。(なければ作成します。)


.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にコマンドを記述するなり、設定ファイルをビルド時に配置させたりして何とかする。


参考

http://magcho.hatenablog.jp/entry/2017/08/11/213243