.htaccess – Reescritura de URL’s
El archivo .htaccess permite llevar a cabo una gran variedad de labores en lo referente al servidor Apache, tales como realizar cambios en el contexto de directorio, proteger al sitio web de accesos no autorizados o que cumplan determinadas características, y un largo etcétera. En este post vamos a centrarnos en la reescritura de URL’s a través del archivo .htaccess haciendo uso del módulo mod_rewrite.
A menudo los servicios de hosting editan estos archivos de forma automática (algo que puede traer de cabeza a la hora de depurar comportamientos del .htaccess) por ejemplo a la hora de manipular los certificados SSL y que se desee forzar el acceso seguro al si. Por otro lado, CMS’s como WordPress también hacen uso de este archivo para sus propósitos.
Buscando información en la web sobre cómo realizar alguna reescritura se encuentran multitud de ejemplos. El problema viene cuando un usuario que es asiduo al copia-pega pretende realizar alguna acción algo mas sofisticada o bien desea realizar un conjunto de ellas. Es necesario entonces conocer los entresijos de la reescritura de URL’s para comprender los resultados que se obtienen. En nuestro ejemplo, quisimos complementar el .htaccess base de WordPress para que también forzara el uso de www y que además se forzara el acceso seguro (https).
La primera circunstancia que tuvimos que entender a la hora de alcanzar nuestro objetivo fue el siguiente; las reglas que realizan un cambio en el hostname acaban provocando una redirección y esto implica que se rompe el flujo de nuestro .htaccess. Por este motivo, en nuestro ejemplo optamos por reescribir primero la url forzando el https y usando www en el caso que no se cumpla alguna de estas dos condiciones. Hecho esto, y tras la redirección que provoca, en la próxima petición al servidor solo actuarán las reglas propias de WordPress ya que no se cumplen las condiciones que forzaban el cambio del hostname. Mejor verlo sobre el ejemplo:
RewriteEngine on # Primero escribimos las condiciones que de cumplirse generan una redirección (no https o no www) RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^midominio.com$ RewriteRule (.*) https://www.midominio.com%{REQUEST_URI} [L] #Luego escribimos las reglas propias de WordPress RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
Estos son los enlaces que te ayudarán a comprender el uso de los archivos .htaccess: