ERR_TOO_MANY_REDIRECTS saat mengalihkan ke HTTPS non-www di Laravel

Oct 03 2019

Saya mencoba mengalihkan semua panggilan ke non-www HTTPS di situs web saya dan memiliki kode berikut di .htaccessfile saya di Laravel selain hal-hal yang dibuat secara otomatis:

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

dan rute berikut:

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');

Apakah seseorang tahu apa yang menyebabkan pengalihan pengalihan ini?

Jawaban

RyanKozak Oct 03 2019 at 05:50

Jika saya memahami pertanyaan Anda dengan benar, Anda mencoba untuk mengarahkan semua permintaan untuk http://example.com, http://www.example.com, dan https://www.example.comuntuk https://example.com. Untuk melakukan itu, ini adalah cara yang tepat untuk melakukannya di file akses Anda.

RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
boolfalse Oct 03 2019 at 06:00

Tentang pertanyaan pertama (alasan terlalu banyak pengalihan):

Pengalihan berasal dari baris ke-3 dari .htaccess Anda Mungkin Anda telah mengetikkan URL non- "www" dan ingin mengalihkannya ke halaman (https://example.com/... dalam kasus Anda) yang juga tidak memiliki awalan "www". Jadi itu jatuh dalam lingkaran, dan setelah 20 kali itu membuat kesalahan.

  1. Sebagai gantinya Anda dapat mencoba cara-cara ini:
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Ini akan mengarahkan semua permintaan non-https ke dengan-https.

  1. Jika Anda ingin mengalihkan semua permintaan non-www ke dengan-www, gunakan ini:
RewriteCond %{HTTP_HOST} (www\.)?your.domain$ [NC] RewriteRule ^(.*)$ https://www.your.domain/$1 [R=301,L]
  1. Jika Anda ingin menggabungkan 2 ketentuan ini menjadi satu, Anda dapat melakukannya melalui regex:
RewriteCond %{HTTP_HOST} (www\.)?(.*) [NC]
RewriteRule ^(.*)$ https://www.%2/$1 [R=301,L]

Ini akan mengarahkan semua permintaan ini

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

ke "https://www.your.domain/... "

Catatan: jangan lupa untuk menulis ini tepat sebelum 3 cara Anda ini. contohnya seperti ini:

 # 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]

Rute PS tidak diperlukan untuk pertanyaan ini