

名前ベースのバーチャルサーバだとサーバ毎に証明書が必要となってしまうので、LaravelのプロジェクトをサブディレクトリのURLで公開したいと思いました。一通り設定して
_ttp://hoge.com/subdir で接続すると「NotFoundHttpException」となってしまいます。お尻にスラッシュ「/」をつけて
_ttp://hoge.com/subdir/ とすると動作します。

環境は以下の通りです。

  * CentOS 6.8
  * Nginx 1.10.2
  * PHP 5.6
  * PHP-FPM 5.6.29
  * Laravel 4.2

Nginxの設定は以下の通りです。  
/etc/nginx/conf.d/subdir.conf

[code]

    server {
        listen 80;
    
        server_name hoge.com;
    
        error_log /var/log/nginx/error.log notice;
        rewrite_log on;
    
        # Remove trailing slash to please routing system.
        rewrite ^    (.+)/$ $1;
    
        location /
        {
            try_files $uri $uri/ /index.html /index.php?$query_string;
        }
    
        location ~ ^/index.php$ {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_split_path_info ^(.+\.php)(.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
        }
    
        # For subdir
        location ~ ^/subdir(/(.+))?$ {
            root /var/www/Code/subdir/public;
    
            try_files $1 /subdir/index.php?$query_string;
    
            location ~ ^/subdir/index.php$ {
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root/index.php;
                fastcgi_split_path_info ^(.+\.php)(.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
            }
        }
    }
    
[/code]

github上に [laravel42-starter-kit](https://github.com/etudor/laravel42-starter-
kit) というのがあって、これで試すとお尻スラッシュ付けなくても動作します。「laravel42-starter-
kit」ではSymfony関連のパッケージがほとんど「2.5」となっていましたが、私のアプリでは「2.7」となってました。「laravel42-starter-
kit」で無理やり「composer
update」するとSymfony2.7となり、お尻スラッシュのURLリクエストで同様に「NotFoundHttpException」となりました。composerでインストールされるSymfony以外のパッケージが原因かもしれませんが、ルーティングに関するエラーなので怪しいと思っています。ちなみにLaravel4.2と5.1を素の状態でインストールしても、最初のデモ画面の表示で同様のNG状態となりました。  
Nginxの設定で回避できるのか、アプリのcomposerパッケージをなんとかするか、はたまたLaravelの設定やアプリコード修正で対応するか、どれでアプローチすべきか悩んでます。XDebugで追ってみましたが、初心者なもので原因にたどり着けませんでした。

どなたか解決策をご存知の方や同様の問題を抱えられてる方がおられましたら、回答よろしくお願いいたします。


CC BY-SA 3.0
2017-02-10T06:33:33.580
32554
2022-06-22T03:06:55.700
2017-02-10T07:20:12.947
20600
20600
question
php nginx laravel
尻スラッシュなしサブディレクトリのURL指定でLaravelアプリにアクセスしたい


尻スラッシュはトレイリングスラッシュと言うみたいです。（今調べました（笑）  
ちなみに仕組みはこちら→（<http://wa3.i-3-i.info/word11910.html>  
Laravelはデフォルトだとトレイリングスラッシュ（URL末尾のスラッシュ）を消すようです。  
下記がデフォルトです。この辺り見てみてはいかがでしょう。

public/.htaccess

[code]

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    
    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    
[/code]


CC BY-SA 3.0
2017-03-28T06:51:42.963
33601
2017-03-28T06:51:42.963
21211
32554
answer