laravel的我的nginx配置
server {
listen 80;
server_name app.dev;
rewrite_log on;
root /var/www/l4/angular;
index index.html;
location /{
# URLs to attempt, including pretty ones.
try_files $uri $uri/ /index.php?$query_string;
}
location /lara/ {
index index.php;
alias /var/www/l4/public/;
}
# Remove trailing slash to please routing system.
if (!-d $request_filename) {
rewrite ^/(.+)/$ /$1 permanent;
}
location ~ ^/lara/(.*\.php)$ {
alias /var/www/l4/public/$1;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Laravel路线:
Route::get('/', function()
{
return View::make('index');
});
Route::get('x', function()
{
return "alpha";
});
我的问题是,“http://app.dev/lara/index.php”正在运行,但“http://app.dev/lara”并且lara / x无效。
答案 0 :(得分:5)
简而言之,进行以下编辑。下面解释原因。
替换
try_files $uri $uri/ /index.php?$query_string;
与
try_files $uri $uri/ /lara/index.php?$query_string;
用此
替换最后一个位置指令location ~ /lara/(.*)$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME "/var/www/l4/public/index.php";
fastcgi_param REQUEST_URI /$1;
}
重新启动nginx。
现在为什么。我发现你的nginx配置有几个错误。首先,/index.php?$query_string
指令中的try_files
应为/lara/index.php?$query_string
,否则nginx会尝试将http://app.dev/lara
作为/var/www/l4/angular/index.php?
的请求,这不会导致任何地方(除非你有一个index.php,甚至它将作为文本提供,而不是通过fpm)。
第二个与location ~ ^/lara/(.*\.php)$
指令有关。我认为将其限制为以.php结尾的URI是错误的,因为它不适用于http://app.dev/lara/x
,这将使nginx仅搜索/var/www/l4/public/x
,当然返回404。将正则表达式更改为^/lara/(.*)$
应该可以捕获/lara/x
。现在fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
指令是错误的,因为对于http://app.dev/lara/x
,SCRIPT_FILENAME
是/var/www/l4/public/x/lara/x
,并且删除别名指令中的$1
将不会更好。相反,像这样fastcgi_param
fastcgi_param SCRIPT_FILENAME "/var/www/l4/public/index.php";
,删除别名指令,它现在没用,然后将include fastcgi_params;
移到fastcgi_param
之上,这样就不会覆盖SCRIPT_FILENAME
}值。
完成?还没 :)。尝试/lara/x
会显示Laravel路由错误,因为它会尝试查找路由lara/x
而不是x
,这是因为您要包含fastcgi_params
。只需在fastcgi_param REQUEST_URI /$1;
param指令后添加SCRIPT_FILENAME
即可。现在它应该工作正常。别忘了重新启动nginx :)。