ERR_TOO_MANY_REDIRECTS在 Laravel 中重定向到非 www HTTPS 时



我正在尝试将所有调用重定向到我网站上的非www HTTPS,除了自动生成的东西之外,我在Laravel的.htaccess文件中还有以下代码:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ https://example.com%{REQUEST_URI} [L,R=301,NC]

以及以下路线:

Route::get('/', function () {
return redirect()->route('build.index');
});
Auth::routes();
// Profile
Route::get('/profile/{user}', 'ProfilesController@show')->name('profile.show');
Route::get('/profile/{user}/edit', 'ProfilesController@edit')->name('profile.edit');
// Build
Route::get('/builds', 'BuildsController@index')->name('build.index');
Route::get('/builds/{hunter}', 'BuildsController@hunter')->name('build.hunter');
Route::get('/build/create', 'BuildsController@create')->name('build.create');
Route::post('/build', 'BuildsController@store')->name('build.store');
Route::get('/build/{build}/edit', 'BuildsController@edit')->name('build.edit');
Route::put('/build/{build}', 'BuildsController@update')->name('build.update');
Route::get('/build/{build}/{hunter?}/{title?}', 'BuildsController@show')->name('build.show');
// Skill trees
Route::get('/planner/{encryption}', 'PlannerController@show');
Route::get('/planner', 'PlannerController@index');
Route::post('/rate/{build}/{rating}', 'RatingsController@store');
Route::put('/rate/{build}/{rating}', 'RatingsController@update');
Route::delete('/rate/{build}', 'RatingsController@destroy');
Route::post('/comment', 'CommentsController@store');

有人知道是什么导致了这个重定向循环吗?

如果我正确理解您的问题,您正在尝试将所有请求重定向到http://example.comhttp://www.example.comhttps://www.example.comhttps://example.com。为此,这是在访问文件中执行此操作的正确方法。

RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

关于 1-st 问题(重定向过多的原因(:

重定向来自您的 .htaccess 的第 3 行 可能您键入了非"www"URL,并且它想将其重定向到该页面(https://example.com/...在您的情况下(,也没有"www"前缀。 所以它陷入循环,20 次后它抛出了一个错误。

  1. 相反,您可以尝试以下方法:
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

这会将所有非 https 请求重定向到 with-https。

  1. 如果要将所有非 www 请求重定向到 with-www,请使用以下命令:
RewriteCond %{HTTP_HOST} (www.)?your.domain$ [NC]
RewriteRule ^(.*)$ https://www.your.domain/$1 [R=301,L]
  1. 如果你想将这两个条件混合为一个,你可以通过正则表达式来实现:
RewriteCond %{HTTP_HOST} (www.)?(.*) [NC]
RewriteRule ^(.*)$ https://www.%2/$1 [R=301,L]

这将重定向所有这些请求

http://your.domain/...
http://www.your.domain/...
https://your.domain/...

到"https://www.your.domain/...">

注意:不要忘记在这 3 种方式之前写下这个。 例如像这样:

# actually this can be the answer for your 2-nd question
RewriteEngine On
RewriteCond %{HTTP_HOST} (www.)?(.*) [NC]
RewriteRule ^(.*)$ https://www.%2/$1 [R=301,L]

附言这个问题不需要路线

最新更新