2012-04-01 9 views
12

Tengo un nombre de dominio: TestSite.com. Puedo crear varios subdominios de este sitio y se refieren a ellos como first.TestSite.com, second.TestSite.com, etc.¿Cómo hacer referencia al dominio principal sin codificar su nombre?

¿Cómo refiero a TestSite.com relativamente sin tener que codificar su nombre en una html o archivo aspx en first.TestSite.com? Lo que quiero decir es (el uso de carpetas como ejemplo) si tengo una carpeta TestSite y una subcarpeta primera

TestSite/primera

, a continuación, desde la primera que se remiten a su carpeta TestSite padres por

../

¿Qué puedo usar para referirse a TestSite.com de first.TestSite.com? Gracias.

+2

Las carpetas son una jerarquía anidada. Los subdominios no lo son. Los subdominios pueden presentar problemas para javascript, cookies y certificados ssl. Incluso puede presentar problemas para cosas como el almacenamiento en caché de imágenes: ¿está en blanco.gif de first.testsite.com la misma imagen que blank.gif de testsite.com? No es así para un navegador. –

+0

Los subdominios también pueden causar problemas para las arañas de los motores de búsqueda y las clasificaciones, si eso es importante para su caso. –

+0

@BrianWhite tiene razón SSL. Además, SSL solo funcionará con una dirección IP (con Apache). Por lo tanto, incluso si tuviera dinero para comprar certificados SSL para cada subdominio, necesitaría tener sus propias direcciones IP. Que podría no ser posible dependiendo de las limitaciones de su ISP. – cgTag

Respuesta

11

No hay forma de utilizar enlaces relativos puros. Tienes que programarlo como una manipulación de cadena.

Algo así como:

var host = location.host; 
var lastPeriod = host.lastIndexOf("."); 
var remainder = host.substring(0, lastPeriod); 
var afterSecondLastPeriod = remainder.lastIndexOf('.') + 1 
var baseDomain = host.substring(afterSecondLastPeriod); 
console.log(baseDomain); 

EDIT: versión más corta usando expresiones regulares:

var baseDomain = host.match(/[^.]*\.[^.]*$/)[0] 

Esta es general, por lo que siempre devolverá la última parte. Independientemente de si es a.TestSite.com, b.a.TestSite.com, etc. devolverá TestSite.com.

Tendrá que modificarlo si esta suposición no es correcta.

5

Si desea conservar sus enlaces relativos, puede usar el elemento base.

[href del elemento de base] atributo especifica un URI absoluto que actúa como la base URI para resolver URIs relativos.

Por lo tanto, añadir un elemento de base, especificar el href desea, y todas las URIs relativas en la página ahora utiliza el URI se han especificado como la base de URI.

<head> 
   <base href="http://testsite.com" /> 
</head> 

Eso es todo lo que necesita. Sin embargo, si desea hacer las cosas un poco más limpias, puede extraer ese URI del web.config usando System.Configuration. ConfigurationManager . AppSettings. He aquí un fragmento de aspx:

<head> 
   <base href="<%= ConfigurationManager.AppSettings["rootdomain"] %>" /> 
</head> 

Y el web.config:

<configuration> 
    <appSettings> 
    <add name="rootdomain" value="http://testsite.com" /> 
    </appSettings> 
</configuration> 

Este método le permite afectar a muchos elementos de una y su valor puede ser conducido desde el web.config.

1

Dado que etiquetó su pregunta ASP.NET, voy a suponer que quieres hacer este lado del servidor, por lo que no dependes de JavaScript en el lado del cliente para generar enlaces HTML.

En primer lugar, asegúrese de que tiene un archivo Web.config en sus sitios de subdominio, y añadir esto a la configuración:

<configuration> 
    <appSettings> 
    <add name="MainDomain" value="example.com" /> 
    </appSettings> 
</configuration> 

uso de este ajuste en sus páginas ASPX, hipervínculos en uno de sus subdominios 'páginas se vería así:

<a href="<%$ AppSettings: MainDomain %>">Go to main domain home page</a> 
<a href="<%$ AppSettings: MainDomain %>/products.aspx">Go to products page on the main domain</a> 

el ajuste con name="MainDomain" se leerá desde el archivo de configuración, y se inserta en la página donde dice <%$ AppSettings: MainDomain %>. De esta manera, está creando el HTML requerido en el lado del servidor, sin necesidad de codificación rígida.

Si necesita cambiar el nombre, simplemente actualice el archivo de configuración, y todas las páginas usarán automáticamente el nuevo nombre de dominio.

1

Una solución alternativa sería utilizar el nombre de dominio original para el servidor activo, pero apúntelo a su entorno de desarrollo.

Puede anular las búsquedas DNS en Windows agregando líneas a este archivo.

C: \ Windows \ System32 \ drivers \ etc anfitriones \

Añadir la siguiente con un editor de texto.

127.0.0.1 www.livesite.com 
127.0.0.1 first.livesite.com 
127.0.0.1 second.livesite.com 

Estos dominios ahora se asignarán a la locahost. Entonces no habrá necesidad de hackear HTML para probar.

+1

Advertencia, señalar múltiples dominios a 127.0.0.1 siempre me causa problemas de maneras extrañas. Nunca resultó ser la solución simple al complicado problema al que me enfrentaba. Lo he probado en muchas situaciones diferentes y siempre termino revirtiéndolo. –

+1

@Brian: no hay nada de malo en AFAIK al señalar múltiples nombres de host a 127.0.0.1, al igual que con señalar múltiples nombres de host a cualquier otra dirección IP. Sin embargo, significa que necesita configurar su servidor web de desarrollo para realizar alojamiento virtual basado en nombre (a menos que desee que todos sus sitios de desarrollo se vean idénticos). –

+0

@BrianWhite la mayoría de los desarrolladores web usan hosts para señalar múltiples dominios a su servidor local. De lo contrario, no es posible trabajar en más de un sitio web. Como solo se puede configurar un sitio para operar fuera de localhost. Lo que hago es cambiar el .com a .local para todos mis sitios. Ejemplo; www.thinkingmedia.ca se convierte en www.thinkingmedia.local en mi máquina de desarrollo. Actualmente tengo más de 50 sitios locales funcionando sin ningún problema. Lamento haber tenido problemas, pero si comienza una nueva pregunta sobre los problemas. Estaría encantado de ayudar. – cgTag

Cuestiones relacionadas