2009-02-25 6 views
19

Cuando estoy en una parte segura de un sitio web que estoy desarrollando (ingresando a una página o carpeta específica usando https), los enlaces relativos al las páginas normales se convierten automáticamente a https también.Forma breve de enlazar a http desde https (y viceversa) usando enlaces relativos

¿Hay alguna manera de decirle a < una etiqueta > que siempre use el protocolo http en lugar del protocolo https (o al revés)?

Sé que es fácil usando el enlace completo (http://www.mysite.com/index.html o https://www.mysite.com/index.html), pero me gustaría que funcione con enlaces relativos (index.html, ../index.html, etc.).

Respuesta

10

Usamos Apache mod_rewrite para controlar si una página se sirve a través de http o https. He aquí un fragmento de ejemplo de archivo de directorio raíz .htaccess de un sitio:

# Redirect most reqests for https to http 
RewriteRule ^https://www.example.com(.*) http://www.example.com$1 [R=301,NC] 

# Allow some URIs to be https if requested 
RewriteCond %{SERVER_PORT} ^443$ 
RewriteCond %{REQUEST_URI} !^/images/(.*)$ 
RewriteCond %{REQUEST_URI} !^/scripts/(.*)$ 
RewriteCond %{REQUEST_URI} !^/styles/(.*)$ 
RewriteCond %{REQUEST_URI} !^/store(.*)$ 
RewriteCond %{REQUEST_URI} !^/login.htm$ 
RewriteRule ^(.*) http://www.example.com/$1 [L,R] 

# Force some URIs to be https only 
RewriteCond %{SERVER_PORT} ^80$ 
RewriteRule ^store(.*) https://www.example.com/store$1 [L,R] 

RewriteCond %{SERVER_PORT} ^80$ 
RewriteRule ^FormSanityKey.htm https://www.example.com/login$1 [L,R] 

leer todos los detalles en:

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

+0

+1 para la frase, me recordó al chico de las noticias en la nave espacial Tierra :) – Niloct

2

Parece que quiere usar the BASE element.

No hay forma de 'decirle' a un Ancla que use un protocolo específico o no, al menos sin usar el elemento BASE en el CABEZAL de esa página.

¿Hay alguna razón por la cual desee utilizar enlaces relativos sobre enlaces absolutos? This article habla sobre la trampa de usar enlaces relativos con HTTPS, la posibilidad de tener su sitio indexado doble y tal.

+2

Gracias. El elemento base afectará a todos los enlaces en la página y habrá ambos tipos en la misma página (http y https). También prefiero enlaces relativos porque hace que la vida (pruebas, etc.) en una conexión lenta a Internet sea mucho más fácil y puedo probar sitios en carpetas en el servidor. – jeroen

+1

¿Doble indexación de su sitio? ¿No es un problema de la máquina de indexación? Me gusta: ¿no revisan los archivos para encontrar contenido idéntico?No apoyo las "reglas" de acuñación para los webmasters en función de cuán incorrectos funcionen los motores de búsqueda en un momento determinado (lo que puede ser diferente de su comportamiento futuro). –

4

No estoy seguro si esto es exactamente lo que estaba buscando, pero si usted está usando Apache, hay un truco que puede utilizar para hacer esto: http://httpd.apache.org/docs/2.2/ssl/ssl_faq.html#relative

Básicamente poner el siguiente en el fichero de configuración de Apache:

RewriteEngine on 
RewriteRule ^/(.*):SSL$ https://%{SERVER_NAME}/$1 [R,L] 
RewriteRule ^/(.*):NOSSL$ http://%{SERVER_NAME}/$1 [R,L] 

continuación, anexar :SSL a cualquier enlace (en la página web) para el que desea forzar HTTPS y :NOSSL a cualquier enlace para el que desea forzar HTTP normal.

+0

Bien, gracias, creo que intentaré eso. – jeroen

2

No hay forma de hacer esto con hipervínculos relativos ya que estás usando un protocolo diferente, no sería diferente a vincular a una ubicación ftp.

+1

Es solo una breve descripción de la sintaxis URL/URI. Puedo imaginarme fácilmente un mundo en el que pueda tener un enlace con una ruta relativa, pero un protocolo absoluto (como "mantener el resto, cambiar la ruta y el protocolo"), del mismo modo que tenemos enlaces relativos al protocolo ("mantener protocolo, cambiar todo lo que viene después"). Simplemente sucede que no vivimos en este mundo. –

27

Puede hacer que todos sus enlaces internos sean independientes del protocolo utilizando la siguiente sintaxis :

<a href="//some/file/on/your/domain.php">link text</a>

en lugar de

<a href="some/file/on/your/domain.php">link text</a>

la // hará que el respeto sea cual sea el protocolo de enlace de la página se cargó de nuevo.

+1

Gracias por su respuesta. No lo he intentado, pero los enlaces relativos normales siempre siguen el protocolo sobre el que se cargó la página de origen, por lo que esto no cambiaría nada. Además de eso, quiero que páginas y directorios específicos y relativos se carguen sobre https y otros a través de http. – jeroen

+0

Lo siento, leí mal su pregunta. Acabo de volver y leerlo y realmente no se aplica. – Matthew

+4

Iniciar un URI con dos barras es una "referencia de ruta de red" y funciona como Matt describió ** siempre que especifique un dominio **. No puede usar esta sintaxis para archivos locales como parece indicar el ejemplo (el navegador intentaría resolver "algunos" como si fuera un dominio). Ver [URI comenzando con dos barras ... ¿cómo se comportan?] (Http://stackoverflow.com/questions/4071117/uri-starting-with-two-slashes-how-do-they-behave) – Rudi