LoginSignup
3
2

More than 5 years have passed since last update.

Laravel+Nginxでpublicの下のアクセス優先順位をかえる

Last updated at Posted at 2016-06-08

Laravel+Nginxで、htmlよりphpを優先したいケースがあったのでメモ。
(スマートじゃないかもしれない)

環境

Laravel homestead(2016/5/30時点の最新)
Ubuntu 14.04
Laravel 5.1
nginx/1.9.14
PHP 7.0.5-2+deb.sury.org~trusty+1 (cli) ( NTS )

リクエスト処理順

  1. Nginxの '/etc/nginx/nginx.conf' 内、 server>root に規定されたディレクトリ=webのルートになり、実在するファイルをチェック。あればそのままそれを表示。
  2. "/"で指定された場合の、優先順位はserver>indexの記載順。 ちなみに、Homesteadの場合は、上記configからincludeしている、/etc/nginx/sites-enabled/homestead.app に実際の設定が記述されている。 デフォルト
/etc/nginx/sites-enabled/homestead.app
server {
    listen 80;
    listen 443 ssl;
    server_name homestead.app;
    root "/home/vagrant/Code/Laravel/public";

    index index.html index.htm index.php;
以下略)
  1. 上記の優先順位により、public以下のindex.phpを読み込む(Laravelの処理へ入る)
  2. index.phpの
$app = require_once __DIR__.'/../bootstrap/app.php';

が読み込まれることにより、Laravelの本流へ

  1. routes.phpに規定されたルーティングに応じて、Karnel.php に規定されたmiddlewareやContoller等が実行される

publicの下のファイルの優先順位をかえる。

/home/vagrant/Code/Laravel/public/original/ の下に、
- index.php
- index.html

を配置。index.phpを先に読み込ませたい。

etc/nginx/sites-enabled/homestead.app
server {
略)
#    index index.html index.htm index.php;
    index index.php index.html index.html;
以下略)

に書き換えて、# nginx -s reload

→結果、phpの方が先に読まれるようになった!

index.htmlへのアクセス

このままでは普通にブラウザから、ドメイン/original/index.html と打ったらアクセスできる。

index.htmlのアクセス拒否をするには

etc/nginx/sites-enabled/homestead.app
server {
(中略)

    location ~ /\.ht {
        deny all;
    }

#追加ここから
    location ~* ^/.*/index.html$ { 
        deny all;
    }
#追加ここまで

    ssl_certificate     /etc/nginx/ssl/homestead.app.crt;
    ssl_certificate_key /etc/nginx/ssl/homestead.app.key;
}

のように足してやればOK。

index.phpの中から、

readfile("index.html");

のように呼んでやれば、URLにindex.htmlを出さずに表示することができる。

別ディレクトリのindex.phpを呼び出す

(追記)

etc/nginx/sites-enabled/homestead.app
server {
(中略)
   location ~* ^/apps/.+/$ {
        index /apps/index.php;
   }
(略)
}

みたいにしてやると、
ドメイン/apps/アプリ名/
にアクセスしたときに、
public/app/index.php
を呼ぶことができる。


参考)

http://qiita.com/syou007/items/3e2d410bbe65a364b603
http://tengine.taobao.org/nginx_docs/ja/docs/http/request_processing.html

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2