Url amigables

Iniciado por idenergia, 10 Agosto 2016, 14:04 PM

0 Miembros y 1 Visitante están viendo este tema.

idenergia

Hola,
Quisiera mejorar la estructura de mis url.

Tengo una web estática y le he dado forma a las url para que no acabasen en .php
Gracias a htacces las reescribo con esta instrucción

RewriteEngine On
RewriteCond %{HTTP_HOST} ^idenergia.com [NC]
RewriteRule ^(.*)$ http://www.idenergia.com/$1 [L,R=301]

Así por ejemplo productos.php es /productos
Ahora me gustaria poder crear una estructura mejor añadiendo un subdirectorio previo para crear una arquitectura:

/productos
/productos/placas-solares-termicas
/productos/placas-solares-fotovoltaicas

El problema es que cuando en el menu pongo que el enlace sea /productos/placas-solares-termicas me lleva a un 404. :rolleyes:

¿Cómo puedo hacerlo?

gracias


gAb1

Para ello debes implementar url routing con php. Pero hay un pequeño problema, ya no podrás usar el indexamiento de apache, osea navegar por las carpetas (por ejemplo website.com/css/sytles.css), por lo que tendrás que crearte un subdominio para servir el contenido estático. Lo bueno es que es más seguro.

Yo lo tengo de la siguiente manera:

página principal y si tienes subdominios que requieran esto también:

Código (apache) [Seleccionar]
<IfModule dir_module>
   DirectoryIndex index.php
</IfModule>

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^index\.php$ - [L]
   RewriteRule . index.php [L]
</IfModule>


Y para el subdominio estático (yo lo llamo static.website.com):

Código (apache) [Seleccionar]
<Files *>
   SetHandler default-handler
</Files>

<IfModule dir_module>
   DirectoryIndex index.html
</IfModule>

<IfModule mod_headers.c>
   SetEnvIfNoCase Origin: "https?://(www\.)?(website\.com|subdominio\.website\.com )(:\d+)?$" ACAO=$0
   Header set Access-Control-Allow-Origin: "%{ACAO}e" env=ACAO
   Header set Access-Control-Allow-Methods: "GET"
</IfModule>


Lo primero es sencillo de entender, lo que hace es redirigir todas las peticiones al index.php, que ahora es el router (en lugar de apache, por eso ya no funcionará website.com/css/styles.css).

Lo segundo lo que hace es: primero desactiva php (no se necesita) y activa CORS para que se puedan hacer peticiones get para cargar los archivos estáticos (ya sean imagenes, javascript, css, etc...). Donde dice website lo cambias por el nombre de tu web y donde dice subdominio por el nombre de tu subdominio.

Esa era la configuración de Apache, ahora viene la parte de programación PHP. Esto ya lo he explicado anteriormente, te dejo un enlace: http://foro.elhacker.net/php/incluir_metadatos_de_forma_dinamica-t454368.0.html;msg2077138#msg2077138 Aquí explico en detalle como hacerlo, cualquier cosa que no entiendas no dudes en preguntarlo, eso sí, ordenadas una por una las dudas y no todas juntas ;D

zonahurbana

Hola.

gAb1, qué framework usas?

Cuando inicie con PHP quería hacer esta configuración de las URLs pero me parecía un tanto complicado (de hecho aun me parece complicado, creo que podría llegar a entenderlo pero tendría que revisarlo con mucha calma jeje).

Buscando información me encontré con sugerencias sobre usar un framework, y así fue como terminé usando Laravel. Como ya trae un sistema para manejar rutas, solo debo declararlas.

Entonces por curiosidad quería saber qué framework usas. Ya que si manejas el tema de rutas a este nivel, el framework ha de ser a más bajo nivel, o bien ser más complejo pero centrado en otro temas ;-)

Cada vez existen más bibliotecas, frameworks, que simplifican las cosas, pero da cierto "miedo" pensar que solo uso características sin saber qué es lo que ocurre por dentro.
De hecho, siendo este año 2016, aun no sé cómo está conformada una calculadora por dentro, o más bien dicho, cómo la hicieron (¿todo a nivel de circuitos o programaron algo que luego "exportaron" a un circuito fijo?).

Saludos.
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

gAb1

Pues yo tampoco tengo ni idea de como funciona una calculadora por dentro  ;D Hice (en su dia) calculadoras en C, alomejor así es como funcionan, un script, ni idea.

Uso mi propio framework, empecé a programar por mi cuenta y me gusta conocer el código que uso en mis aplicaciones. Para eso no hay nada mejor que hacerlo todo tu mismo. ¿Reinventar la rueda? Sip (o no, como se mire  :laugh:), pero no me importa, así voy aprendiendo cada vez más y más y haciendo mi código más seguro.

Sé lo que significa "bajo nivel" en lo referente a lenguajes de programación y su relación con el hardware, pero PHP es un lenguage de nivel alto y no tiene comunicacion alguna con el hardware, ¿a que te refieres entonces?

Aunque creo que te refieres a lo ultimo que has comentado, código que no conoces ejecutandose... Y para leerme el framework entero prefiero mantenerme informado sobre seguridad y aplicarla yo mismo a mi propio código.

zonahurbana

Cita de: gAb1 en 15 Agosto 2016, 20:25 PM
Aunque creo que te refieres a lo ultimo que has comentado, código que no conoces ejecutandose... [...]
Sí, justo a eso me refería.

Cuando puedo imaginarme cómo funciona algo, es decir, tengo idea de cómo puede estar escrito, acepto usarlo.
Aunque, hay cosas que no puedo imaginar cómo funcionan. En esos casos sí comienzo a indagar un poco por cómo están por dentro.

Por ejemplo, aun no comprendo bien el concepto de Websockets (y ese vacío es muy incómodo).
He implementado un chat en tiempo real usando Laravel y Pusher, pero no tengo idea de cómo funciona Pusher internamente. Creo que podría seguir algún tutorial de Node para implementar ese servicio por mi cuenta, pero no lo hice aun, y tampoco sé por qué no mencionan a PHP para estos casos (asumo que debe ser menos eficiente, más que ser algo imposible).

Bueno, gracias. Perdón idenergia por distorsioar el tema del post ;D
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...