ConoHaのVPSを使ってLumenでAPIを作っているのですが、routes.phpで設定したとおりにURLパラメータがとおらないという事体が発生しました。
結論は、サーバーのhttpd.confに下記の用に記載することで解決しました。
DocumentRoot "/var/www/LumenAPI/public" ServerName localhost # from Here <Directory "var/www/LumenAPI/public"> AllowOverride None <IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On RewriteRule ^(.*)/$ /$1 [L,R=301] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule> </Directory>
Linuxサーバーの知識が乏しいのでトラブルにハマりまくりですが、今回は下北沢OSScafeの河村さんのアドバイスもあり、なんとか解決できましたので、トラブった内容と解決方法をブログに書いておこうと思います。
目次
LumenでURLパラメータが通らない?
/app/Httpd/routes.php に、$app->getでURLパラメータを記載しました。
$app->get('/', function(){ echo "TEST"; });
とかいて、ブラウザからURLを入力すると、これは普通に表示されました。
でも、
$app->get('/test', function(){ echo "TESTTEST"; });
とかいて、ブラウザから ” hoge.com/test ” とやっても、Not Foundで404が返ってきます。
hoge.com/index.php/testだと通る?
StackOverFlowにて、下記の記事を見付けました。まさに、Lumenでroute requestが動かない件です。
laravel – Lumen simple route request doesn’t work – Stack Overflow
これをみたところ、パラメータの前にindex.phpを入れて動くか?みたいなことがいわれていました。
For example, yourdomain.com/api would become yourdomain.com/index.php/api
なので、routes.phpに次のように記載
$app->get('index.php/test', function(){ echo "TEST_index"; });
これで、ブラウザから” hoge.com/index.php/test “とためしたところ無事に表示されました。
で、解決方法ですが、ここでは、.htaccessを使うとサイトのスピードが遅くなるから、バーチャルホストに.htaccessの内容を書くほうがいいよと回答されていました。
<VirtualHost *:80> DocumentRoot "/var/www/lumen/public" # Change this line ServerName yourdomain.com # Change this line <Directory "/var/www/lumen/public"> # Change this line # Ignore the .htaccess file in this directory AllowOverride None # Make pretty URLs <IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On # Redirect Trailing Slashes... RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule> </Directory> </VirtualHost>
ConoHaでhttpd.confに下記の用に記載
上記からここに至るまですんなりはいかなかったのですが、結果的にサーバー側のhttpd.confに下記の用に記載することによって、index.php/test みたいにしなくても無事に表示されるようになりました。
DocumentRoot "/var/www/LumenAPI/public" ServerName localhost <Directory "var/www/LumenAPI/public"> AllowOverride None <IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On RewriteRule ^(.*)/$ /$1 [L,R=301] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule> </Directory>
httpd.confを更新したら、service httpd restartするのを忘れずに。
まとめ
今までレンタルサーバーしか使ってませんでしたがLumenでAPIを作ろうと思ったのがきっかけで、最近ではLinuxサーバーの勉強をしています。
ここらへんは慣れないことばかりで、昨日もAtomにremote-ftpを入れてSSH接続でサーバーのファイルを更新できるよう取り組んでいたのですが、SSH接続はできるもののファイルの書き込みがPermission Deniedでできないことに数時間悩みました。
結局、/var/wwwフォルダの所有者がrootだった為だということがわかり、フォルダの所有者を変更することで解決したのですが、今回のhttpd.confの件もそうですが、ひとつひとつを前にすすめるためにすごく時間がかかっています。
まぁ、ちょっとづつでも成長はしているようなので、引き続き頑張っていきたいとおもいます!
あと、ConoHaを使おうと思ってたら、私の友達紹介で1000円のクーポンが入ると同時に私にもクーポンが貰えるので、よかったら下記リンクをチェックしてみてください。