Redirects mediante .htaccess

Este arquivo emprégase para xestionar sitios web en plataformas de hosting compartidas.

Usos comúns do arquivo

Son varios os seus usos e, dentro destes, os máis comúns son as redireccións, a carga de páxinas de erro personalizadas, o uso de HTTPS por enriba de HTTP, permitir ou denegar direccións específicas do sitio e a protección de directorios mediante contrasinal.

Cando non se debe utilizar?

Como dixemos na primeira liña, .htaccess utilízase no caso de ter un servizo de hosting compartido, polo tanto, se o noso caso non é este, debemos utilizar a sección <Directory> dos arquivos de configuración do servidor ou virtual host.

Razóns para evitar o seu uso

Hai dúas razóns para evita-lo uso de .htaccess:

Primeira: Rendemento. Cando AllowOverride está configurado para o uso de .htaccess, httpd buscará este tipo de arquivo en cada directorio, comezando polo directorio raíz. Isto provocará un impacto no rendemento, xa que esta busca efectuarase cada vez que un documento é solicitado.

Se un arquivo é solicitado dende o directorio /public_html/web/content, httpd deberá busca-los seguintes arquivos:

/.htaccess

/public_html/.htaccess

/public_html/web/.htaccess

/public_html/web/content/.htaccess

Ademais, esta busca efectuarase aínda que o arquivo requirido non exista.

Segunda: Seguridade. Calquera usuario con permisos para facer cambios nos arquivos .htaccess terá un control completo sobre a configuración do servidor.

Tendo en conta estes contratempos e riscos, imos coa configuración do noso arquivo .htaccess.

Habilita-lo arquivo .htaccess

Para isto, precisamos entrar na configuración httpd do teu sitio web:

/etc/httpd/conf/test.conf

Aquí debemos colocar unhas directivas para habilitar a lectura de .htaccess, senón este arquivo non será leído.

</VirtualHost>
<Directory /var/www/test.com/public_html>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

No caso de ser un hosting compartido, os provedores xa terán habilitado o uso de .htaccess, polo que soamente precisamos engadir este arquivo no directorio public_html localizado entre os arquivos principais do noso sitio web.

Redireccionar URLs

Se o que queres é redireccionar dunha URL a outra, a directiva Redirect é a mellor opción a escoller.

Para redireccionar a un dominio diferente, poderemos facelo mediante o seguinte código:

Redirect 301 "/service" "https://newdomain.com/service"

Se o que queremos é redireccionar dunha URL antiga a unha nova:

Redirect 301 "/old_url.html" "/new_url.html"
Load a custom 404 Error page
Pasa unha mellor experiencia de usuario, podemos cargar unha páxina de erro personalizada:
ErrorDocument 404 /error/pagenotfound.html

Forza-lo uso de HTTPS por enriba de HTTP

Para esta función usaremos o módulo RewriteEngine, que seguirá unhas condicións antes de revolver a petición ó usuario.
# Turn on the rewrite engine
RewriteEngine On
# Force HTTPS and WWW
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [OR,NC]
RewriteCond %{https} off  
RewriteRule ^(.*)$ https://www.test-website.com/$1 [R=301,L]
Imos mirar con máis detalle estas condicións:
RewriteEngine on habilita o uso deste módulo, sen esta liña non levaría a cabo as condicións engadidas.
A primeira condición é comprobar se a petición leva www. [OR, NC] (no case) por se o usuario utiliza maiúsculas ou minúsculas indistintivamente.
Despois comproba se foi escrito o protocolo HTTPS, %{https} off significa que este protocolo non foi usado.
Cando as RewriteCond foron satisfactorias, RewriteRule redireccionará á URL con HTTPS.

Cambia-las URIs do sitio

Para engadir URIs máis lexibles, tamén podemos facelo a través de .htacces e cunhas poucas liñas.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/artigo-(.*)$
RewriteRule ^(.*)$ controller/Main?artigo=$1 [NC, L]
${REQUEST_URI} comproba se a URI coincide coa escrita na barra de enderezo, se é así, lanza o RewriteRule, senón ignorará esta regra. Esta condición sobre a URI non é a única deste tipo, hai outras como %{QUERY_STRING} ou %{HTTP_COOKIE}. Un bo listado estas condicións témonolo en askapache.com.

Fontes documentais:

redhat.com