Моя система - Centos 7 и Apache 2.4.6
Мне нужно перенаправить http на https с помощью Apache httpd.conf, я просмотрел сотни страниц и нашел несколько кодов, но это хорошо и не жестко закодировано из DigitalOcean но он возвращает двойную косую черту в конце URL-адреса и это изображение для различных результатов перенаправления
<VirtualHost IP:80>
# https/http www -> https non-www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# http non-www -> https non-www
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>
<VirtualHost IP:443>
# I removed this from 443 and the same result
# https/http www -> https non-www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
</VirtualHost>
Это потому, что вы берете первую косую черту в (. *):
RewriteRule ^ (. *) $ https: //% 1 /1 доллар США [R = 301, L]
Этот вид регулярных выражений используется в контексте для каждого каталога, где первая косая черта не используется и не применяется, в контексте виртуального хоста первая косая черта присутствует, поэтому вы захватываете и добавляете ее к результату с помощью (. *).
Итак, один из наиболее типичных и правильных способов сделать это в контексте виртуального хоста - вручную добавить косую черту перед группой захвата:
RewriteRule ^/(.*) https://%1/$1 [R=301,L]
Примечание: я удалил знак «$», потому что при захвате всего не нужно указывать «конец».