erknrio of Programming Guanches
4/13/2016 - 12:43 PM

Apache virtualhost, sites enabled, redirecciones. Redirigir de un dominio a otro. FROM: https://simonecarletti.com/blog/2009/01/apache-query

Apache virtualhost, sites enabled, redirecciones. Redirigir de un dominio a otro. FROM: https://simonecarletti.com/blog/2009/01/apache-query-string-redirects/; https://wiki.apache.org/httpd/RewriteQueryString;

# Redireccion del dominio antiguo
<VirtualHost *:80>
# Dominio al que corresponde
  ServerName mydomain.com
# Otras formas de acceder al directorio
  ServerAlias www.mydomain.com web.mydomain.com
# Redireccion basica por defecto
  Redirect 301 "/" "http://www.mydomain.org/"
 </VirtualHost>
# Nuevo dominio
<VirtualHost *:80>
	ServerAdmin webmaster@localhost
	ServerName mydomain.org
  ServerAlias www.mydomain.org mydomain.org

  RewriteEngine on

# Redirecciones de elementos concretos.
# Cadena inicial

# Con esta condicion nos aseguramos que la peticion se hace desde una pagina concreta
# de lo contrario podria generar conflictos con otros elementos de nuestro sitio.

  RewriteCond %{REQUEST_URI} ^/pagina\.lenguaje$
  
  # REQUEST_URI hace referencia a la URI que nos llega al servidor
  # ^ indica el comienzo de la cadena
  # \. escapamos el punto para evitar que lo tome como "cualquier caracter"
  # $ indica el final de la cadena
  # pagina\.lenguaje: Esto podria ser home.php (pagina.lenguaje)

# Si cumple la condiciones anterior y la query string viene vacia redirigimos
# al inicio de nuestra pagina. Atencion al 301, se explica debajo.

# OBVIAMOS LAS EXPLICACIONES QUE SE HAN REALIZADO EN APARTADOS SUPERIORES

  RewriteCond %{QUERY_STRING} ^$
  RewriteRule ^(.*)$ http://www.mydomain.org/? [R=301,L]
  
  # QUERY_STRING indica la parte de query string de la URI: ?variable=valor
  # . indica cualquier caracter
  # * indica cero o mas veces
  # R=301 indica una redireccion con el codigo 301, permanente.
  # usar 302 si es temporal o ver listado de error http.
  # https://es.wikipedia.org/wiki/Anexo:C%C3%B3digos_de_estado_HTTP
  # L indica una flag (bandera) que evita que apache siga buscando coincidencias

# Redireccion directa de una pagina de un dominio a otra
# en el ejemplo estamos redireccionando a una web con url amigables

  RewriteCond %{QUERY_STRING} ^variable=valor$
  RewriteRule ^(.*)$ http://www.mydomain.org/foo/mi-url-divertida/mas-cosas/otra/? [R=301,L]
  
  # Asumiendo la doncicion anterior la url que nos llega es algo como esto:
  # pagina.lenguaje?variable=valor, o home.php?foo=bar
  
  # Ponemos todas las redirecciones directas, una por elemento a redireccionar.
  
  RewriteCond %{QUERY_STRING} ^variable=valor1$
  RewriteRule ^(.*)$ http://www.mydomain.org/foo/mi-url-divertida/mas-cosas/otra/? [R=301,L]
  
  RewriteCond %{QUERY_STRING} ^variable=valor2$
  RewriteRule ^(.*)$ http://www.mydomain.org/foo/mi-url-divertida/mas-cosas/otra/? [R=301,L]
  
  # Hay que fijarse que aunque el valor cambia el destino sigue siendo el mismo,
  # usar una redireccion por cada elemento.

# El resto de casos van al inicio de nuestro nuevo dominio.
# en este caso al seguir todas el mismo patron usamos una regexp, cambiar segun uso.
# En el ejemplo imaginamos que todos los valores son caracteres normales en minuscula.

  RewriteCond %{QUERY_STRING} ^variable=[a-z]+$
  RewriteRule ^(.*)$ http://www.mydomain.org/? [R=301,L]

# fin redirecciones

	DocumentRoot /var/www/mydomain.org/htdocs/

	<Directory />
		Options FollowSymLinks
		AllowOverride All
	</Directory>
	<Directory /var/www/mydomain.org/htdocs>
		Options Indexes FollowSymLinks MultiViews +ExecCGI
		AllowOverride All
		Order allow,deny
		allow from all
    AddHandler cgi-script .cgi

	</Directory>

	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<Directory "/usr/lib/cgi-bin">
		AllowOverride None
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</Directory>


#	ErrorLog ${APACHE_LOG_DIR}/error.log
	ErrorLog /var/www/mydomain.org/logs/error.log
	
	# Indicamos la ruta donde guardar los ficheros de log de errores,
	# muy util cuando tenemos cuando tenemos multiples dominios.

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn
	
	# El log level indica el nivel de alerta que se guardara en los logs,
	# va en disminucion desde el debug que logea casi cualquier cosa hasta
	# el crit que logea solo fallos criticos.
	# https://httpd.apache.org/docs/current/mod/core.html#loglevel

#	CustomLog ${APACHE_LOG_DIR}/access.log combined
	CustomLog /var/www/mydomain.org/logs/access.log combined
	
	# que es combined?: https://httpd.apache.org/docs/2.4/logs.html#combined
	# Indicamos la ruta donde guardar los ficheros de log de accesos,
	# muy util cuando tenemos cuando tenemos multiples dominios.
</VirtualHost>