四天了,我正在尝试制作一个 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