2011-03-23 25 views
5

que estoy tratando de volver a escribir la siguiente dirección:htacces reescribir TLD sin cambiar subdominio o directorios

el subdominio debe coincidir con cualquier subdominio. lo mismo para el TLD. tanto: http://car.example.com/ y http://cat.example.co.uk deben reescribirse

http://subdomain.example.com/some/dir a http://subdomain.example.nl/some/dir

y http://example.com/some/dir a http://exampkle.nl/some/dir

(también con www dirección.)

pero mi conocimiento de .htaccess y las reglas de reescritura en general no son lo suficientemente buenas para t su :(

Espero que alguno de ustedes conozca la solución.

ps. Yo probé una búsqueda;)

Respuesta

3

El reto viene con tener para detectar y dar cuenta de cuatro diferentes posibles patrones de dominio:

  • example.com → example.nl
  • example.co.uk → example.nl
  • sub.example.com → sub.example.nl
  • sub.example.co.uk → sub.example.nl

Por lo tanto, lo que este conjunto de reglas hace es comprueba que el dominio de nivel superior no lo es. nl (evitando que ocurra un bucle), luego saca el subdominio, www o no, del frente (se lee como "captura cualquier cosa que no sea un punto seguido de un punto, opcional), seguido por el dominio base, seguido de un punto. No tenemos que coincidir con la URL completa, ya que no mantenemos el TLD.

RewriteEngine On 
RewriteCond %{HTTP_HOST} !example\.nl$ 
RewriteCond %{HTTP_HOST} ^([^.]+\.)?example\. 
RewriteRule^http://%1example.nl%{REQUEST_URI} [NC,L,R=301] 

de la RewriteRule^coincide con cualquier URL, a continuación, inserta los contenidos del primer conjunto de parens en la RewriteCond precedente (el subdominio) con% 1, y completa la reescritura añadiendo la ruta y banderas solicitado ignorar caso , haga de esto la última regla y redireccione con un 301 amigable con los motores de búsqueda, asegurándose de que la URL reescrita aparezca en el navegador del usuario. Cualquier cadena de consulta (texto que aparece después de a? En la URL) se incluye automáticamente de forma predeterminada.

+0

¡Casi! tenía un ciclo infinito porque no detuvo la reescritura si el TLD era correcto. agregado RewriteCond% {HTTP_HOST}!^([^.] + \.)? example \.nl - Ahora se detiene si el TLD es correcto. Además, sorprendente primera respuesta! bienvenido a SO – Tjirp

+0

Realmente no es mi primera respuesta en este sitio, solo el primero en ser reconocido. – Eric3

2

Prueba esto: EDIT: Ver cambios en subdominio, usando% 1 a capturar desde RewriteCond

RewriteEngine On 
# Check if the hostname requested is subdomain.example.com or empty 
# Now we attempt to capture the subdomain with (.*)? and reuse with %1 
RewriteCond %{HTTP_HOST} ^(.*)?example.com$ [NC] 
RewriteCond %{HTTP_HOST} !^$ 
# Rewrite it as subdomain.example.nl and redirect the browser 
RewriteRule ^(.*) http://%1example.nl$1 [L,R,NE,QSA] 

# Note: With the above edit for %1, this part should no longer be necessary. 
# Then do the same for example.com, with or without the www 
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ [NC] 
RewriteCond %{HTTP_HOST} !^$ 
RewriteRule ^(.*) http://www.example.nl$1 [L,R,NE,QSA] 
+0

He actualizado mi pregunta un poco. El subdominio y el TLD son "desconocidos" (bueno, no exactamente, pero en este momento hay 14 subdominios diferentes en 3 TLD diferentes que deberían reescribirse al .nl TLD con el mismo subdominio Y sufijo). Si esto es imposible, es una pena, utilizaré tu snipper muchas veces :) – Tjirp

+0

Ver mis cambios arriba. Esto no se ha probado, pero creo que funcionará. –

+0

Mientras realizaba la dirección para el cambio en el subdominio, no se dirigió al TLD. Gracias por tu ayuda, aunque :) la publicación de Eric3 fue (en parte) la solución – Tjirp