Странное поведение, когда я получаю доступ к папке без конечной косой черты по протоколу HTTPS (.htaccess)

#apache #.htaccess #mod-rewrite #https #http2

Вопрос:

У меня есть веб-сайт, размещенный на реальном хостинге (хостинг linux с Apache 2.4.46 и Php 7.4 (64 бит)), и веб-сайт, размещенный на моем ПК (хостинг Windows 10 с Apache 2.4.48 (OpenSSL 1.1.1 k) и Php 8.07 (64 бит)).

Во-первых, я должен сказать, что на реальном хостинге (хостинг linux) Я должен использовать другую .htaccess конфигурацию:

 RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
 

На моем компьютере (на котором установлена Windows) Я должен использовать другую .htaccess конфигурацию:

 RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
 

Поэтому я объединил обе конфигурации в один набор правил:

 ################################################################################
########################### Fix for Loading Resources ##########################
################################################################################
Options -Multiviews
################################################################################
############################### Force to use HTTPS #############################
################################################################################
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
################################################################################
########################## Set Security Header Options #########################
################################################################################
<IfModule mod_headers.c>
  Header always set Content-Security-Policy "upgrade-insecure-requests;"
  Header set X-Content-Type-Options "nosniff"
  Header append X-Frame-Options "SAMEORIGIN"
  Header set X-XSS-Protection "1; mode=block"
  Header unset X-Powered-By
</IfModule>
################################################################################
########################## Prevent Caching for CSS/JS ##########################
################################################################################
<FilesMatch ".(?i:css|js)$">
  <IfModule mod_expires.c>
    ExpiresActive Off
  </IfModule>
  FileETag None
  <IfModule mod_headers.c>
    Header unset ETag
    Header unset Pragma
    Header unset Cache-Control
    Header unset Last-Modified
    Header set Pragma "no-cache"
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
    Header set Expires "Thu, 1 Jan 1970 00:00:00 GMT"
  </IfModule>
</FilesMatch>
 

На моем компьютере ( localhost ) когда я получаю доступ к папке "gallery" без конечной косой черты, я вижу:

 GET https://localhost/gallery [HTTP/2 301 Moved Permanently 0ms]

GET https://localhost/gallery/ [HTTP/2 302 Found 201ms]
 

On my real hosting when I access to folder "gallery" without ending slash I can see:

 GET https://www.example.it/gallery [HTTP/2 301 Moved Permanently 116ms]

GET http://www.example.it/gallery/ [HTTP/1.1 301 Moved Permanently 73ms]

GET https://www.example.it/gallery/ [HTTP/2 302 Found 84ms]
 

As you can see (in firefox consolle (CTRL Shift I)) while on localhost I have all records marked as HTTP/2 , on real hosting I have one record marked as HTTP/1 . This means no HTTPS .

I have no .htaccess inside folder "gallery" or other folders except for the root where I have the posted .htaccess .

Что я могу сделать для его исправления? Мне бы хотелось .htaccess , чтобы правило работало в обеих системах и применялось ко всем папкам, предоставляя мне полный HTTP/2 доступ ко всем папкам, даже если нет конечной косой черты.

PS: в обеих системах у меня есть HTTP/2 и SSL (правда HTTPS ).

Спасибо.