Durante años, nuestros sitios web basados en bases de datos han tenido direcciones URL que se parecen a: https://www.example.com/product?id=30
Pero hoy en día, y especialmente para fines de SEO, queremos que nuestras URL sean "agradables" y se vean como: https://www.example.com/30/myproduct
Usamos Zope 2.13.x ejecutándose en Debian y usando Apache 2.4 como servidor web front-end. Sé que no mucha gente usa Zope, pero al utilizar mod_rewrite de Apache, deberíamos poder enviar la reescritura por proxy y tener buenas URL que aún pasen los argumentos de la base de datos necesarios para servir correctamente las páginas a los usuarios finales.
Solía haber un libro de cocina de Zope en el que escribí un montón de tutoriales realmente detallados sobre la funcionalidad de Zope, pero parece que ya no existe y quería compartirlo con la comunidad de SE.
Lo increíble es que esto no es específico de Zope, pero funcionará/debería funcionar con cualquier reescritura de una URL basada en parámetros en una URL agradable y es muy fácil una vez que todo funciona.
Para una total transparencia, voy a responder mi propia pregunta para que quede documentada para todos.
Usando el motor de reescritura en Apache, decida cómo quiere que sus URL se vean para el usuario final en su navegador web.
Por ejemplo, si está llamando a una base de datos y tiene una URL que se parece a
https://www.example.com/products?id=30&product_name=myproduct
pero quieres que esa URL se vea como
https://www.ejemplo.com/productos/30/miproducto
usaría una regla de reescritura de la siguiente manera:
RewriteRule ^/products/(.*)/(.*) /products?id=$1&product_name=$2 [L,P,NE,QSA]Para explicar eso más:
^/products/(.*)/(.*) dice que cada vez que se accede a domain.com/products, busque dos variables en los siguientes nombres de directorio, es decir, /(.*)/(.*)
Si solo quisiera una variable, haría ^/products/(.*)
Del mismo modo, si quisiera tres variables, haría ^/products/(.*)/(.*)/(.*)
A partir de ahí, debemos decirle a Apache cómo interpretar esa URL para reescribir y aún permitir que Zope (o cualquier base de datos que esté usando) pase los parámetros de URL correctos. Esa parte es:
/products?id=$1&product_name=$2 Apache ahora tomará el primer (.*) y lo tratará como $1 . Tomará el segundo (.*) y lo tratará como $2 y así sucesivamente.
La parte entre paréntesis es extremadamente importante.
L = Esto hace que Apache deje de procesar el conjunto de reglas de reescritura si la regla coincide. Esto es importante porque no desea que Apache se confunda y comience a intentar otras reescrituras.
P = Proxy la solicitud. Esto asegura que el navegador no muestre una URL diferente a https://www.example.com/products/30/myproduct (es decir, no queremos que el usuario final vea la URL reescrita como https://www.example.com/products?id=30&product_name=myproduct
NE = Sin caracteres de escape de URL. Necesita esto para asegurarse de que la reescritura de la URL no intente escapar de los caracteres especiales como $ = & , ya que estos son importantes para los parámetros de la URL.
QSA = Esto permite que existan múltiples variables (o parámetros de URL)
Tenga en cuenta: es muy importante considerar cómo desea que se vean sus URL (las URL agradables) porque eso es lo que desea enviar a los motores de búsqueda. Si cambia la estructura de su URL, esas bonitas URL ya no funcionarán y su clasificación en los motores de búsqueda puede disminuir.