我已经尝试过更改 .htaccess 文件,尝试了几种解决方案,但没有任何效果。每当我向 URL 添加尾部斜杠时,它都会打开另一个页面,这种情况不应该发生,向 URL 添加尾部斜杠应将其重定向到不带尾部斜杠的 URL。我尝试了以下解决方案:
我想要实现的是 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 中添加尾部斜杠,我会得到以下结果:
最后,我能够使用中间件来做到这一点,编辑 .htaccess 不知何故在本地不起作用,或者在我的应用程序中不起作用,无论如何,请检查下面的解决方案:
if (preg_match('/.+\/$/', $request->getRequestUri()))
{
return Redirect::to(rtrim($request->getRequestUri(), '/'), 301);
}
参考 这里
<?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);
}
}