Saltar al contenido

Cómo reescribir URLs con mod_rewrite para Apache en Ubuntu 18.04

marzo 4, 2020

 módulo mod_rewrite

Introducción

de Apache le permite volver a escribir URL de una manera más limpia, la traducción de caminos legible en las cadenas de consulta de códigos de usar. También le permite volver a escribir las direcciones URL basadas en las condiciones. Un archivo .htaccess

le permite crear y aplicar reglas de reescritura sin acceder a los archivos de configuración del servidor. Al colocar el archivo .htaccess en la raíz de su sitio web, puede administrar vuelve a escribir en un esquema por sitio o por directorio base.

En este tutorial, se le permite archivos mod_rewrite y el uso de .htaccess para crear una redirección URL básica, y luego explorar un par de casos de uso avanzada.

Requisitos previos

Para seguir este tutorial, necesitará:

  • Una Ubuntu 18.04 servidor configurado siguiendo la guía de configuración inicial del servidor de Ubuntu 18.04, incluyendo un usuario no root sudo y un firewall.
  • Apache instalado siguiendo el Paso 1 de Cómo instalar Linux, Apache, MySQL, PHP (LAMP) pila en Ubuntu 18.04.

Una Ubuntu 18.04 servidor configurado siguiendo el Ubuntu 18.04 guía de configuración inicial del servidor, incluyendo un usuario no root sudo y un firewall.

Apache instalado siguiendo el Paso 1 de Cómo instalar Linux, Apache, MySQL, PHP (LAMP) pila en Ubuntu 18.04.

Paso 1 – Habilitación de mod_rewrite

Para que Apache para entender las reglas de reescritura, en primer lugar es preciso activar el mod_rewrite. Ya está instalado, pero está deshabilitado en una instalación por defecto de Apache. Utilice el comando a2enmod para permitir que el módulo:

sudo a2enmod rewrite

  • sudo a2enmod reescritura

Esto activará el módulo o avisarle de que el módulo ya está habilitado. Para poner estos cambios en efecto, reinicie Apache.

sudo systemctl restart apache2

  • sudo systemctl reiniciar apache2

mod_rewrite está ahora totalmente habilitado. En el siguiente paso vamos a crear un fichero .htaccess que vamos a utilizar para definir las reglas de reescritura de redirecciones.

Paso 2 – Configuración de archivos .htaccess Hasta

Un .htaccess nos permite modificar nuestras reglas de reescritura sin acceder a los archivos de configuración del servidor. Por esta razón, .htaccess es fundamental para la seguridad de su aplicación web. El período que precede garantiza el nombre de archivo que el archivo está oculto.

Nota: Cualquier regla que se puede poner en un archivo .htaccess se pueden también poner directamente en los archivos de configuración del servidor. De hecho, la documentación oficial de Apache recomienda el uso de los archivos de configuración del servidor en lugar de .htaccess de Apache porque lo procesa más rápido de esa manera.

Sin embargo, en este ejemplo sencillo, el aumento de rendimiento será insignificante. Además, el establecimiento de normas en .htaccess es conveniente, especialmente con múltiples sitios web en el mismo servidor. Que no requiere reiniciar el servidor para que los cambios surtan efecto y que no requiere privilegios de root para editar esas reglas, lo que simplifica el mantenimiento y la toma y cambia posible con la cuenta sin privilegios. Algunos programas de software de código abierto populares, como WordPress y Joomla, a menudo se basa en un archivo .htaccess para el software para modificar y crear reglas adicionales sobre la demanda.

Antes de empezar a usar archivos .htaccess, necesitará configurar y asegurar unos ajustes más.

Por defecto, Apache prohíbe el uso de un archivo .htaccess para aplicar reglas de reescritura, por lo que primero es necesario para permitir cambios en el archivo. Abra el archivo de configuración de Apache por defecto usando nano o su editor de texto favorito.

sudo nano /etc/apache2/sites-available/000-default.conf

  • sudo nano /etc/apache2/sites-available/000-default.conf

Dentro de ese archivo, se encuentra un bloque de salida en la primera línea. Dentro de ese bloque, agregue el siguiente nuevo bloque para que sus miradas del archivo de configuración como la siguiente. Asegúrese de que todos los bloques estén correctamente sangría.



Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted

. . .

Guardar y cerrar el archivo. Para poner estos cambios en efecto, reinicie Apache.

sudo systemctl restart apache2

  • sudo systemctl reiniciar apache2

Ahora, crear un archivo .htaccess en la raíz del servidor web.

sudo nano /var/www/html/.htaccess

  • sudo nano /var/www/html/.htaccess

Añadir esta línea en la parte superior del nuevo archivo para activar el motor de reescritura.

RewriteEngine on

Guardar el archivo y salir.

Ahora tiene un archivo .htaccess operativa que se puede utilizar para gobernar reglas de enrutamiento de la aplicación Web. En el siguiente paso, vamos a crear archivos de página web de muestra que utilizaremos para demostrar las reglas de reescritura.

Paso 3 – Configuración de URL reescribe

Aquí, vamos a configurar una reescritura de URL básica que convierte URLs ricas en caminos reales a las páginas. En concreto, vamos a permitir a los usuarios el acceso http: // your_server_ip / sobre, sino mostrar una página llamada about.html.

Comience por crear un archivo llamado about.html en la raíz web.

sudo nano /var/www/html/about.html

  • sudo nano /var/www/html/about.html

Copia el siguiente código HTML en el archivo y, a continuación, guardar y cerrar.



About Us<itle><br /> </head><br /> <body data-rsssl=1></p> <h1>About Us</h1> <p> </body><br /> </html></code> </p> <p> Puede acceder a esta página en http: //your_server_ip/about.html, pero aviso de que si se intenta el acceso http: // your_server_ip / sobre, verá un error de </strong> <strong> 404 Not Found. Para acceder a la página utilizando / sobre el lugar, vamos a crear una regla de reescritura. </p> <p> Todos RewriteRules seguir el siguiente formato: </p> <p> <code>RewriteRule pattern substitution [flags]<br /> </code> </p> <ul> <li> RewriteRule especifica la directiva. patrón </li> <li> es una expresión regular que coincide con la cadena que desee de la URL, que es lo que los tipos de visualización en el navegador. </li> <li> sustitución es la ruta de la URL real, es decir, el camino de los servidores Apache de archivo. banderas </li> <li> son parámetros opcionales que pueden modificar el funcionamiento de la regla. </li> </ul> <p> Vamos a crear nuestra regla de reescritura de URL. Abre el archivo .htaccess. </p> <p> <code>sudo nano /var/www/html/.htaccess<br /> </code> </p> <ul> <li> sudo nano /var/www/html/.htaccess </li> </ul> <p> Después de la primera línea, añadir el RewriteRule marcado en rojo y guardar el archivo. </p> <p> <code>RewriteEngine on<br /> RewriteRule ^about$ about.html [NC]<br /> </code> </p> <p> En este caso, alrededor de $ ^ es el patrón, about.html es la sustitución, y [NC] es una bandera. Nuestro ejemplo se utiliza un par de caracteres con un significado especial: </p> <ul> <li> ^ indica el inicio de la URL, después / your_server_ip. </li> <li> $ indica el final de la URL. </li> <li> sobre los partidos la cadena “aproximadamente”. </li> <li> about.html es el archivo real que el usuario accede. </li> <li> [NC] es una bandera que hace que el caso regla insensible. </li> </ul> <p> ahora puede acceder a http: // your_server_ip / acerca de su navegador. De hecho, con la regla se muestra más arriba, las siguientes URL apuntarán a about.html: </p> <ul> <li> http: // your_server_ip / sobre, debido a la definición de la regla. </li> <li> http: // your_server_ip / A propósito, porque la regla es sensible a mayúsculas. </li> <li> http: //your_server_ip/about.html, porque el nombre del archivo original, adecuada siempre funcionará. </li> </ul> <p> Sin embargo, la siguiente no funcionará: </p> <ul> <li> http: // your_server_ip / sobre /, debido a que la norma establece explícitamente que no puede haber nada después de alrededor, ya que el carácter $ aparece después de aproximadamente. </li> <li> http: // your_server_ip / contacto, ya que no coincidirá con la cadena alrededor de la regla. </li> </ul> <p> Ahora tiene un archivo .htaccess operativa con una regla básica que se puede modificar y ampliar a sus necesidades. En las siguientes secciones, vamos a mostrar dos ejemplos adicionales de directivas de uso común. </p> <h2> Ejemplo 1 – Simplificación de cadenas de consulta con las aplicaciones RewriteRule </h2> <p> web a menudo hacen uso de cadenas <em> consulta </em>, que se anexan a una URL usando un signo de interrogación después de la dirección (?). parámetros separados se delimitan mediante un signo (&). Las cadenas de consulta se pueden utilizar para pasar datos adicionales entre las páginas de aplicación individuales. </p> <p> Por ejemplo, una página de resultados de búsqueda escrito en PHP puede utilizar una URL como http://example.com/results.php?item=shirt&season=summer. En este ejemplo, dos parámetros adicionales se pasan al script de la aplicación result.php imaginaria: artículo, con la camiseta del valor, y sazonar con el valor verano. La aplicación puede usar la información de cadena de consulta para construir la página de la derecha para el visitante. reglas de reescritura </p> <p> Apache se emplean a menudo para simplificar dichos enlaces largos y desagradable como lo anterior en URLs amigables <em> </em> que son más fáciles de escribir e interpretar visualmente. En este ejemplo, nos gustaría simplificar el enlace anterior para convertirse en http://example.com/shirt/summer. Los valores de los parámetros de la camisa y el verano están todavía en la dirección, pero sin la cadena de consulta y el nombre del script. </p> <p> Aquí hay una regla a aplicar esto: </p> <p> <code>RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer [QSA]<br /> </code> </p> <p> La camisa / verano se corresponde de manera explícita en la dirección solicitada y Apache se le dice a servir results.php item = camisa y temporada de verano en lugar =?. El </p> <p> [QSA] banderas se utilizan comúnmente en las reglas de reescritura. Le dicen a Apache para añadir cualquier cadena de consulta adicional a la URL servido, por lo que si los tipos de visitantes http://example.com/shirt/summer?page=2 el servidor responderá con results.php? Item = camisa y temporada de verano = & page = 2 . Sin ella, la cadena de consulta adicional conseguiría descartado. </p> <p> Si bien este método logra el efecto deseado, tanto el nombre del artículo y la estación están codificados en la regla. Esto significa que la regla no funcionarán para cualquier otro artículo, como los pantalones, o estaciones, como el invierno. </p> <p> Para hacer que la regla más general, podemos usar expresiones regulares para que coincida con partes de la dirección original y emplear las partes en un patrón de sustitución. La regla modificada entonces contendrá la siguiente manera: </p> <p> <code>RewriteRule ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2 [QSA]<br /> </code> </p> <p> El grupo expresión regular en primer lugar entre paréntesis coincide con una cadena que contiene caracteres alfanuméricos y números como camisa o los pantalones y guarda el fragmento adaptado como la variable $ 1. El segundo grupo rexpression regulares entre paréntesis coincide exactamente con el verano, invierno, otoño o primavera, y la guarda de manera similar el fragmento adaptado $ 2. </p> <p> Los fragmentos coincidentes se utilizan luego en el URL que se obtiene en las variables de elementos y de temporada en lugar de los valores de la camisa y del verano codificados que usamos antes. </p> <p> Lo anterior se convertirá, por ejemplo, http://example.com/pants/summer en http://example.com/results.php?item=pants&season=summer. Este ejemplo también es a prueba del futuro, permitiendo artículos mutliple y temporadas para volver a escribir correctamente con una sola regla. </p> <h2> Ejemplo 2 – Adición de condiciones con la lógica utilizando reglas de RewriteConds </h2> <p> de reescritura no son necesariamente siempre se evalúa uno por uno sin ninguna limitación. La directiva RewriteCond nos permite añadir condiciones a nuestras reglas de reescritura de control cuando se procesan las reglas. Todos RewriteConds cumplan con el siguiente formato: </p> <p> <code>RewriteCond TestString Condition [Flags]<br /> </code> </p> <ul> <li> RewriteCond especifica la directiva RewriteCond. </li> <li> TestString es la cadena para poner a prueba en contra. </li> <li> La condición es el patrón o la condición de partido. </li> <li> Las banderas son parámetros opcionales que pueden modificar las reglas de actuación y evaluación. </li> </ul> <p> Si un RewriteCond como resultado true, se considerará que el RewriteRule inmediatamente después. Si no lo hará, se descartará la regla. RewriteCond múltiple puede utilizarse una tras otra y, con el comportamiento por defecto, todos deben evaluar como true para la siguiente regla a tener en cuenta. </p> <p> A modo de ejemplo, supongamos que desea redirigir todas las peticiones a archivos o directorios que no existen en la espalda sitio a la página principal en lugar de mostrar la página de error </strong> <strong> 404 Not Found estándar. Esto se puede lograr con las siguientes reglas condiciones: </p> <p> <code>RewriteCond %{REQUEST_FILENAME} !-f<br /> RewriteCond %{REQUEST_FILENAME} !-d<br /> RewriteRule . /<br /> </code> </p> <p> Con lo anterior: </p> <ul> <li>% {REQUEST_FILENAME} es la cadena para comprobar. En este caso, es el nombre del archivo solicitado, que es una variable de sistema disponible para todas las solicitudes. </li> <li> -f es un sistema incorporado en la condición que verifica si existe el nombre solicitado en el disco y es un archivo. Los ! es un operador de negación. En conjunto,! Evalúa -F para cierto sólo si el nombre especificado no existe o no es un archivo. </li> <li> Del mismo modo,! -D evalúa a cierto sólo si el nombre especificado no existe o no es un directorio. </li> </ul> <p> El RewriteRule en la última línea entrará en vigor sólo para las solicitudes a archivos o directorios que no existen. El RewriteRule en sí es muy simple y redirige todas las solicitudes a la raíz / sitio web. </p> <p> mod_rewrite permite crear URLs legibles. En este tutorial, ha aprendido a usar la directiva RewriteRule a las direcciones URL de redirección, incluidos los que tienen cadenas de consulta. También ha aprendido cómo redirigir las direcciones URL de forma condicional utilizando la directiva RewriteCond. </p> <p> Si desea aprender más sobre mod_rewrite, echar un vistazo a mod_rewrite de Apache Introducción y documentación oficial de Apache para mod_rewrite. </p> <div class="banner desktop"> <div class="center fluid"> </div> </div> <div class="banner mobile"> <div class="center fluid"> </div> </div> <footer class="entry-footer"> <section class="entry-related"> <h3>Entradas relacionadas</h3> <div class="flex flex-fluid"> <article id="post-1296" class="entry-item column-third"> <a href="https://openanalytics.es/como-configurar-la-autenticacion-de-contrasena-con-apache-en-ubuntu-18-04-inicio-rapido/" rel="bookmark"> <img width="150" height="150" src="https://openanalytics.es/wp-content/uploads/2020/03/password_prompt-150x150.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" /><h4 class="entry-title">Cómo configurar la autenticación de contraseña con Apache en Ubuntu 18.04 [Inicio rápido]</h4> </a> </article> <article id="post-1258" class="entry-item column-third"> <a href="https://openanalytics.es/como-configurar-apache-de-maquinas-virtuales-en-ubuntu-18-04-inicio-rapido/" rel="bookmark"> <img width="150" height="47" src="https://openanalytics.es/wp-content/uploads/2020/03/example-150x47.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" /><h4 class="entry-title">Cómo configurar Apache de máquinas virtuales en Ubuntu 18.04 [Inicio rápido]</h4> </a> </article> <article id="post-1260" class="entry-item column-third"> <a href="https://openanalytics.es/como-instalar-los-paquetes-r-usando-devtools-en-ubuntu-18-04/" rel="bookmark"> <img width="150" height="150" src="https://openanalytics.es/wp-content/uploads/2020/03/r-shiny-1804-150x150.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" /><h4 class="entry-title">Cómo instalar los paquetes R usando devtools en Ubuntu 18.04</h4> </a> </article> <article id="post-1263" class="entry-item column-third"> <a href="https://openanalytics.es/como-instalar-jenkins-en-ubuntu-18-04/" rel="bookmark"> <img width="150" height="150" src="https://openanalytics.es/wp-content/uploads/2020/03/unlock-jenkins-150x150.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" /><h4 class="entry-title">Cómo instalar Jenkins en Ubuntu 18.04</h4> </a> </article> <article id="post-1272" class="entry-item column-third"> <a href="https://openanalytics.es/como-instalar-git-en-ubuntu-18-04/" rel="bookmark"> <img width="150" height="150" src="https://openanalytics.es/wp-content/uploads/2020/03/branch-tags-150x150.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" /><h4 class="entry-title">Cómo instalar Git en Ubuntu 18.04</h4> </a> </article> <article id="post-1283" class="entry-item column-third"> <a href="https://openanalytics.es/como-instalar-el-servidor-web-apache-en-ubuntu-18-04-inicio-rapido/" rel="bookmark"> <img width="150" height="150" src="https://openanalytics.es/wp-content/uploads/2020/03/small_apache_default-150x150.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" /><h4 class="entry-title">Cómo instalar el servidor Web Apache en Ubuntu 18.04 [Inicio rápido]</h4> </a> </article> </div> </section> <div id="comments" class="comments-area"> <div id="respond" class="comment-respond"> <h3>Deja un comentario <small><a rel="nofollow" id="cancel-comment-reply-link" href="/como-reescribir-urls-con-mod_rewrite-para-apache-en-ubuntu-18-04/#respond" style="display:none;">Cancelar respuesta</a></small></h3> <form action="https://openanalytics.es/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate> <p class="comment-notes"><span id="email-notes">Tu dirección de correo electrónico no será publicada.</span> Los campos obligatorios están marcados con <span class="required">*</span></p><textarea id="comment" name="comment" cols="45" rows="1" required></textarea><p class="comment-form-author"><label for="author">Nombre <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" required='required' /></p> <p class="comment-form-email"><label for="email">Correo electrónico <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" required='required' /></p> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /><label for="wp-comment-cookies-consent">Guardar mi nombre, correo electrónico y sitio web en este navegador para la próxima vez que haga un comentario.</label></p> <p class="form-submit"><input name="submit" type="submit" id="submit" class="btn btn-primary" value="Publicar comentario" /> <input type='hidden' name='comment_post_ID' value='1172' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p> </form> </div><!-- #respond --> </div> </footer> </div> </div> </main> <footer class="site-footer"> <div class="container"> <div class="credits row"> <p>SEO y Programación.</p> </div> </div> </footer> <!-- Site Overlay --> <div class="site-overlay"></div> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebSite", "name": "Open Analytics", "alternateName": "SEO y Programación.", "url": "https://openanalytics.es" } </script> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Article", "headline": " módulo mod_rewrite Introducción de Apache le permite volver a escribir URL de Read more", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://openanalytics.es/como-reescribir-urls-con-mod_rewrite-para-apache-en-ubuntu-18-04/" }, "datePublished": "2020-03-04", "dateModified": "2020-03-04", "author": { "@type": "Person", "name": "admin" }, "publisher": { "@type": "Organization", "name": "Open Analytics" } } </script> <script type='text/javascript' src='https://openanalytics.es/wp-content/themes/orbital/assets/js/navigation.js?ver=20190101'></script> <script type='text/javascript' src='https://openanalytics.es/wp-content/themes/orbital/assets/js/social.min.js?ver=20190101'></script> <script type='text/javascript' src='https://openanalytics.es/wp-content/themes/orbital/assets/js/main.js?ver=20190101'></script> <script type='text/javascript' src='https://openanalytics.es/wp-includes/js/comment-reply.min.js?ver=5.2.7'></script> <script type='text/javascript' src='https://openanalytics.es/wp-includes/js/wp-embed.min.js?ver=5.2.7'></script> </body> </html>