Laravel 5.1似乎没有使用nginx上设置的文档根目录


Laravel 5.1 seems not to use the document root setted on nginx

四天了,我正在尝试制作一个 laravel 5.1 应用程序,以便在 nginx 的子目录中工作。从零开始,我取得了一些进展,但现在我陷入了困境,因为 laravel 似乎不明白它属于一个子文件夹,除了"/"之外的每一条路由都无法按预期工作。

我试图了解这是否是因为 nginx conf 重写规则上的错误配置或 laravel 中的某些内容而发生的。

首先,这是我的目录树:

/srv/http --> Web servers' root
/srv/http/finics --> Laravel's public folder (is a symlink to /srv/laravel/public)

这是nginx上针对/finics位置的相应配置。

location  /finics/ {
    root /srv/http/;

try_files $uri $uri/ @laravel;
    location ~ '.php(?:$|/) {
      fastcgi_split_path_info ^(.+'.php)(/.+)$;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_param HTTPS on;
      fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
      fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
      fastcgi_intercept_errors on;
    }
}

location @laravel {
    rewrite /finics/(.*)$ /finics/index.php?/$1 last;
}
location ~ '.css$ {}
location ~ '.js$ {}
}

对于重写规则和try_files,我已经尝试了本网站以及数字海洋等其他论坛上建议的所有内容。

其中一些是

try_files $uri $uri/ /index.php?$query_string;
try_files $uri $uri/ /finics/index.php?$query_string;
rewrite ^/finics/(.*)$ /finics/index.php$query_string; 
try_files $uri $uri/ /finics/index.php$is_args$args;

但它们实际上都没有奏效。

所以问题,正如我之前所说,只有/(domain.net/finics/) 路由在工作。如果我点击应用程序的菜单链接将我转移到种质,它会将我重定向到 domain.net/accessions 而不是 domain.net/finics/accessions。这就是为什么我写的是似乎 laravel 不明白根属于哪个文档。当然,所有 POST 请求都在发生同样的事情。

有人告诉我解决方案可能很容易,但我不知道还能怎么想。

如果有任何关于为什么会发生这种情况的想法,也许是修复它的提示,我将不胜感激。

你需要

让Laravel为你创建URL,一个指向/accessions的链接将完全按照你目前看到的去做,剥离完整的路径,只使用/accessions而不是你所在的任何子路径。

<a href="{{ url('/accessions') }}">
url是为您

创建正确 URL 的帮助程序函数,请参阅基本路由 ->生成到路由的 URL