Estoy tratando de forzar una subcarpeta (/bbb/) de mi dominio raíz para mostrar siempre como https. También mi .htaccess archivo de tomar el cuidado de las extensiones de las páginas.

He puesto el .htaccess archivo dentro de mi /bbb/ carpeta pero me sale «Demasiados redireccionamientos» cuando trato de fuerza para conectar con https, sin que todo funciona bien.

Qué hay de malo en mi código?

Options +FollowSymLinks -MultiViews
Options +Indexes
AcceptPathInfo Off
RewriteEngine on
RewriteBase   /

ErrorDocument 404 https://example.co.uk/404page/404.html

#Force from http to https
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{HTTP_HOST} !^bbb.example.co.uk/$
RewriteRule ^(.*)$ https://bbb.example.co.uk/$1 [R=301]

#take off index.html
 RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{REQUEST_URI} ^(.*/)index\.html$ [NC]
RewriteRule . http://www.%{HTTP_HOST}%1 [R=301,NE,L]

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]    

## hide .html extension
# To externally redirect /dir/foo.html to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.html
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [L]
  • HTTP_HOST contiene sólo el nombre de host. su bbb.example.co.uk/ nunca serán iguales, porque / no es una parte válida del nombre de host.
InformationsquelleAutor SNos | 2016-04-20

3 Comentarios

  1. 3

    Problema está en esta regla:

    #Force from http to https
    RewriteCond %{SERVER_PORT} 80 
    RewriteCond %{HTTP_HOST} !^bbb.example.co.uk/$
    RewriteRule ^(.*)$ https://bbb.example.co.uk/$1 [R=301]
    

    Cambiar esta regla:

    #Force from http to https
    RewriteCond %{HTTPS} off 
    RewriteCond %{HTTP_HOST} =bbb.example.co.uk
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301]
    

    Usted tiene condición invertido debido a la utilización de ! al comienzo y tiene un extra de barra diagonal al final de la cual nunca será igualado por lo tanto hacer que su condición siempre devolverá true.

    Asegúrese de borrar la caché del navegador antes de la prueba de esto.

    • Gracias, pero sigue diciendo que «Demasiados redireccionamientos».. me actualiza la caché
    • Exactamente la misma regla está trabajando bien en mi Apache. Estás detrás de un servidor Apache y %{SERVER_PORT} funciona bien no?
    • Yo no estoy con mi servidor, pero un servidor proveedor de one.com
  2. 34

    intente esto:

    RewriteEngine On
    RewriteCond %{ENV:HTTPS} !on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    • Gracias tan mucho!! Finalmente encontró una solución que trabajó como un encanto 🙂
    • Muchas gracias! Todas las soluciones sin ENV no estaban trabajando.
    • Esta respuesta es un Salvavidas!! 🙂
    • Más elogios para el %{ENV:HTTPS}! Ni idea de por qué o cómo, pero parece ser la única regla que trabajó para mi el programa de instalación!
    • Como en el anterior – cliente extraño paquete de hospedaje y esta es la única regla que trabajó
    • Única cosa que trabajó en un líquido web cloudsites, varios sitios de instalación de wordpress , thnks.
    • Sí, funcionó…pero ¿por QUÉ?!? Hemos estado pasando a muchos clientes a HTTPS durante el último año o así, pero esta es la primera instancia donde he tenido que recurrir a esto…
    • Este no me funciona 🙁 Podría ser la razón por la que pongo el siguiente en la <Virtualhost: *.80> directiva y no en .htaccess? RewriteEngine on RewriteCond %{ENV:HTTPS} !on RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    • Por lo tanto, estamos diciendo RewriteCond %{SERVER_PORT} 80 no funciona, entonces, parece coincidir incluso para las conexiones https, mientras que RewriteCond %{ENV:HTTPS} !on funciona como se esperaba. La aceptación de la respuesta se acepta, ya que corrige la OP error tipográfico, pero esta es la realidad respuesta útil

  3. 12

    Si tienes un proxy server o si usted está utilizando el hosting compartido, a continuación, algunas veces vas a obtener gratis un SSL a través de CloudFlare. Y si usted está usando un framework como CodeIgniter o Laravel, a continuación, usted siempre tiene una ruta de archivo. Así que a veces la respuesta que he dado anteriormente podría no funcionar.

    En ese caso, cuando se intenta redirigir a https usted puede conseguir una cantidad ilimitada de bucles. Así que para resolver que se podría tratar a continuación:

    RewriteEngine On
    
    # If we receive a forwarded http request from a proxy...
    RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
    
    # ...or just a plain old http request directly from the client
    RewriteCond %{HTTP:X-Forwarded-Proto} =""
    RewriteCond %{HTTPS} !=on
    
    # Redirect to https version
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    • Esto hizo que el truco para mí! Al parecer CloudFlare fue echar a perder algo con los redireccionamientos.
    • Después de probar casi de todo, Esto sólo funcionó!! Un millón de gracias 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here