Redirección condicional de Apache HTTP a HTTPS

Redirección condicional de Apache HTTP a HTTPS

todo. Tengo un problema de sintaxis. Intenté seguir otras fuentes, pero simplemente no funciona.

Creé con éxito una redirección HTTP incondicional a HTTPS. Ir ahttp://www.robjvargas.com, termine en HTTPS. Todo muy bien allí.

Pero ahora mi certificado parece necesitar HTTP. Utiliza Let's Encrypt y, por lo tanto, necesita una renovación cada 90 días. Con la redirección en vigor, el ensayo falla. Con la redirección desactivada, el ensayo se realiza correctamente.

Así que intenté poner un RewriteCond para eximir el tráfico de renovación del certificado:

# HTTP to HTTPS redirect
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{Request_URI} !^./acme-challenge/*
RewriteRule (.*) https://www.robjvargas.com$1 [R,L]

Sólo que no funciona. Creo que me estoy perdiendo algo digno de una palmada en la frente una vez que lo veo, pero no lo veo. Con el código anterior, la redirección de HTTP a HTTPS todavía parece universal. Entonces, claramente, RewriteCond es incorrecto. El punto anterior al URI probablemente sea incorrecto, pero lo intenté con y sin él.

También puse el URI completo en RewriteCond, pero eso tampoco lo eximió.

Estoy cerca. No recibo ningún error. Simplemente nunca cumple con la condición prevista.

¿Qué me estoy perdiendo?

Respuesta1

Pero ahora mi certificado parece necesitar HTTP.

Esto no es muy correcto. Personalmente estoy renovando a través de https. Sin embargo, para que eso funcione, debe asegurarse de permitir el acceso al URI de desafío en su https VirtualHost copiando la parte relevante del http VirtualHost. Si no puede o no quiere hacerlo, aquí le mostramos cómo hacerlo funcionar a través de http con la redirección condicional que comenzó a escribir.

El problema es que su expresión regular actual coincidiría con el uri de desafío. De acuerdo con laDocumentos de ApacheREQUEST_URI comienza con /, por lo que debes buscar el uri de desafío de esta manera: ^\/\.well-known\/.*$. Esto coincidirá con el URI del desafío (http://ejemplo.com/.well-known/acme-challenge).

Todo junto:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^\/\.well-known\/.*$
RewriteRule (.*) https://www.robjvargas.com/$1 [R,L]

En caso de problemas futuros, utilice esto:probador de htaccess

Respuesta2

En mi servidor Virtualmin, la siguiente línea funcionó.

RedirectMatch ^/(?!.well-known)(.*)$ https://phpmyadmin.example.com/$1

información relacionada