#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
).
Спасибо.