Laravel 7 - 如何从我的应用程序中删除尾部斜杠 URL?

问题描述 投票:0回答:2

我已经尝试过更改 .htaccess 文件,尝试了几种解决方案,但没有任何效果。每当我向 URL 添加尾部斜杠时,它都会打开另一个页面,这种情况不应该发生,向 URL 添加尾部斜杠应将其重定向到不带尾部斜杠的 URL。我尝试了以下解决方案:

解决方案1

解决方案2

我想要实现的是 http://127.0.0.1:8080/login/ 应重定向到 http://127.0.0.1:8080/login 对于我的应用程序中的每个 URL。

公共/.htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [R=301,L]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

routes/web.php

<?php

use Illuminate\Support\Facades\Route;

// Navigation Menu
Route::get('advisor', 'AdvisorController@index');
Route::get('investment', 'InvestmentController@index');
Route::get('investor', 'InvestorController@index');
Route::get('product', 'ProductController@index');
Route::get('rate', 'RateController@index');
//  Stop registration other functions
 Auth::routes([
    'register' => false, // Registration Routes...
    'reset' => false, // Password Reset Routes...
    'verify' => false, // Email Verification Routes...
  ]);
// Login
Route::get('/', function () { 
  return redirect('login');
});
// Dashboard
Route::get('/home', 'HomeController@index')->name('home');
//admin users
Route::resource('/admin/users', 'Admin\UsersController', ['except' => ['show', 'create', 'store']]);

错误截图:

如果没有尾部斜杠,我的应用程序 URL:

现在,如果我在 URL 中添加尾部斜杠,我会得到以下结果:

php laravel .htaccess redirect
2个回答
2
投票

最后,我能够使用中间件来做到这一点,编辑 .htaccess 不知何故在本地不起作用,或者在我的应用程序中不起作用,无论如何,请检查下面的解决方案:

if (preg_match('/.+\/$/', $request->getRequestUri()))
 {
    return Redirect::to(rtrim($request->getRequestUri(), '/'), 301);
 }

参考 这里


0
投票
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class RedirectTrailingSlash
{
    /**
     * @param Request $request
     * @param Closure $next
     * @return mixed|void
     */
    public function handle(Request $request, Closure $next)
    {
        $pathInfo = $request->getPathInfo();
        if ($request->isMethod('get') && Str::endsWith($pathInfo, '/')) {
            $queryString = count($request->all()) ? '?'.http_build_query($request->all()) : '';
            return response('', 301)->header('Location', rtrim($pathInfo, '/') . $queryString);
        }

        return $next($request);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.