概要
通常のURLは下記のようになります。
http://example.jp/プロジェクト名/public/index.php/コントローラ名/アクション名/パラメータ
このURLから邪魔なpublicやindex.phpを消す方法は検索すると下記の方法が出てきます。
FuelPHPのURLからpublicを消す
【FuelPHP ver1.7.1】URLのindex.phpを取る
しかし、自分はこの手順を踏んでも何故か上手く行かず、訳がわからなくて死にました。
原因
なんとなく.htaccessが読み込まれていないような感じがしたので、試しに.htaccessに下記のようにエラーが起こりそうな文字を入れてみました。
<IfModule mod_rewrite.c>
...
# Remove index.php from URL
errorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
RewriteCond %{HTTP:X-Requested-With} !^XMLHttpRequest$
RewriteCond %{THE_REQUEST} ^[^/]*/index\.php [NC]
RewriteRule ^index\.php(.*)$ $1 [R=301,NS,L]
...
</IfModule>
するとエラーが起きなかったので、やはり.htaccessが読み込まれていないと思いhttpd.confを確認してみました。しかし、httpd.confの設定では AllowOverride All
になっていたので、問題はhttpd.confでは無かったです。
次に、 mod_rewrite.c
が存在しないのでは無いかと思い、.htaccessの <IfModule mod_rewrite.c>
の外にエラーが起こりそうな文字を入れてみました。
errorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
<IfModule mod_rewrite.c>
...
# Remove index.php from URL
RewriteCond %{HTTP:X-Requested-With} !^XMLHttpRequest$
RewriteCond %{THE_REQUEST} ^[^/]*/index\.php [NC]
RewriteRule ^index\.php(.*)$ $1 [R=301,NS,L]
...
</IfModule>
すると予想通りエラーが起きたので、 mod_rewrite.c
が存在しないとわかりました。
解決方法
httpd.confで mod_rewrite.c
がコメントアウトされていたので、コメントアウトを外して対応しました。
#LoadModule rewrite_module libexec/apache2/mod_rewrite.so
↓
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
まとめ
<IfModule>がある.htaccessの設定で詰んだら、そもそも<IfModule>がhttpd.confで読み込まれているか確認しよう!
— 焼きそばメロンパン@🍣 (@ice_arr) 2017年5月20日