Перенаправить /index.php в / без htaccess - PullRequest
0 голосов
/ 02 июля 2018

Я хочу перенаправить http://localhost/mysite/index.php на http://localhost/mysite без использования файла .htaccess

Я написал Middleware и поместил его в Kernel.php, но это не работает

public function handle($request, Closure $next)
{
    if(strpos($request->url(), 'index.php'))
        return Redirect::to('/', 301);

    return $next($request);
}

Ошибка Chrome:

Эта страница не работает localhost перенаправил вас слишком много раз. Попробуйте очистить ваши куки. ERR_TOO_MANY_REDIRECTS

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Попробуйте это:

if (strpos($request->fullUrl(), 'index.php') !== false) {
    $newUrl = str_replace('index.php', '', $request->fullUrl());
    return Redirect::to($newUrl, 301);
}
0 голосов
/ 02 июля 2018

Вам необходимо проверить реальный запрошенный путь, а не URL. Я не проверял это сейчас, но я предполагаю getUrl построить его по маршрутам и добавить index.php по умолчанию.

Так почему бы не использовать php: $_SERVER['REQUEST_URI']

public function handle($request, Closure $next)
{
    if(strpos($_SERVER['REQUEST_URI'], 'index.php'))
        return Redirect::to('/', 301);

    return $next($request);
}

Поскольку вы получите реальный URI, и index.php может быть единственным вызовом, вы можете даже выполнить проверку без поиска, что может быть быстрее:

public function handle($request, Closure $next)
{
    if($_SERVER['REQUEST_URI'] === "/index.php")
        return Redirect::to('/', 301);

    return $next($request);
}

Но имейте в виду:

.htaccess - безусловно, лучшее и более быстрое решение! Вы должны полностью изменить свои переписки на него. Код, который вы напишите выше, будет выполняться при КАЖДОМ вызове вашей стороны. Если вы делаете это по причинам SEO, имейте в виду, что такие вещи увеличат все ваше время загрузки!

Примечание: приведенный выше код не проверен. ;)

0 голосов
/ 02 июля 2018

В Routes.php или route / web.php просто определите маршрут с помощью

Route::get('/', function() { 
    return view('viewname');
}); 

или если вы хотите сохранить его так, как вы его использовали, используйте

return redirect()->intended('viewname');

https://laravel.com/docs/5.6/routing

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...