Il reindirizzamento di http a https restituisce doppie barre


1

Il mio sistema è Centos 7 e Apache 2.4.6

Ho bisogno di reindirizzare http su https usando Apache httpd.conf, ho cercato su google centinaia di pagine e ho trovato alcuni codici ma questo è buono e non codificato da DigitalOcean ma restituisce una doppia barra alla fine dell'URL e questa è un'immagine per i diversi risultati di reindirizzamento

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

1
Probabilmente vuoi passare https://%1/$1a https://%1$1, quindi.
Ceejayoz,

Grazie amico, funziona ma ho usato il codice nella risposta
Hady Shaltout

Risposte:


2

Questo perché stai afferrando la prima barra in (. *):

RewriteRule ^ (. *) $ Https: //% 1 / $ 1 [R = 301, L]

Questo tipo di regex viene utilizzato nel contesto per dir, in cui la prima barra non viene utilizzata e non si applica, nel contesto di virtualhost è presente la prima barra, quindi la si acquisisce e la si aggiunge al risultato con (. *).

Quindi uno dei modi più tipici e corretti per farlo nel contesto di virtualhost è l'aggiunta manuale della barra prima del gruppo di acquisizione:

RewriteRule ^/(.*) https://%1/$1 [R=301,L]

Nota: ho rimosso "$" perché quando si acquisisce tutto non è necessario specificare "la fine".


Grazie amico, puoi darmi il RegEx per convertire non www in https: // www ??
Hady Shaltout,

quello che faccio è generare l'appropriato virtualhost e reindirizzare dall'uno all'altro con un semplice Redirect / https://www.example.com/. Ricorda, prima le opzioni più semplici e regex per natura è tutt'altro che semplice :)
ezra-s,

Ezra-s non funziona nel primo, quindi inizio a cercare un'altra soluzione .. Grazie
Hady Shaltout,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.