Я столкнулся со странной (по крайней мере для меня) проблемой при работе с Laravel 5.3.
Я пытаюсь получить предыдущую ссылку (до того, как пользователь вошел в систему) через сеанс и перенаправить их обратно на эту ссылку после того, как они успешно вошли в систему.
Я использую эту строку кода, чтобы положить в сессию:
Session::put('url.intended', $link);
Я использую эту строку кода, чтобы получить из сессии:
Session::get('url.intended', url('/'));
Когда я запускаю в разработке и читаю из сессии, я получаю этот URL как url.intended:
http://example.test/profile/data?_url=%2Fprofile%2Fdata
С этим URL редирект работает нормально после входа в систему!
Теперь, когда я нахожусь в производственном режиме (AWS, ELB, NGINX), я получаю этот URL как url.intended:
https://example.org/profile/data
без? _url =% 2Fprofile% 2Fdata, поэтому не работает и перенаправляет на домашнюю страницу.
Это проблема Laravel 5.3 или неправильная настройка loadbalancer и nginx?
Конфигурация nginx:
server {
listen 80;
server_name example.org;
rewrite ^/(.*)$ https://www.$host$request_uri redirect;
}
server {
listen 80;
root /var/www/public;
index index.php index.html index.htm;
server_name www.example.org;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
if ($http_x_forwarded_proto = http) {
return 301 https://$server_name$request_uri;
}
location / {
sendfile off;
try_files $uri $uri/ /index.php?_url=$uri&$args;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass phpfpm:9000;
fastcgi_index /index.php;
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Что-то не так с моей настройкой или что-то в laravel, что я могу сделать, чтобы не удалить? _Url from url.intended ??
Если вы используете Laravel 5.3:
Изменить новый перенаправитель авторизации Middleware
/app/Http/Middleware/RedirectIfAuthenticated.php
Измените функцию дескриптора, чтобы она выглядела так:
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect()->intended('/home');
}
return $next($request);
}
Других решений пока нет …