2011-05-23 28 views
8

Estoy trabajando en un proyecto de página web. Decidí usar Apache, PHP (5.1.7, versión impuesta por mi proveedor de servicios) y Dwoo (creación de plantillas) para este propósito.URL de enrutamiento en PHP

Quiero enrutar las URL a mis plantillas. Soy consciente de que hay muchos marcos que hacen este tipo de cosas. Me pregunto si hay una buena manera de lograrlo sin.

He creado mi proyecto de la siguiente manera:

  • src/dwoo - Archivos Dwoo
  • index.php - Esto debe manejar el enrutamiento. Actualmente, solo renderiza la página principal del sitio usando una plantilla.
  • plantillas - Plantillas que representan páginas reales.

Existe una cantidad mínima de lógica comercial (no es un modelo real). Es solo páginas bastante estáticas. El uso de plantillas facilita el trabajo de mantenimiento (herencia, es decir).

¿Alguna idea de cómo configurar el enrutamiento en este caso? Supongo que idealmente cada URL dada debería enrutar a través de index.php que de alguna manera decide qué plantilla representar (es decir,/category/pagename se correlacionaría con templates/category/pagename.tpl).

Respuesta

10

Utilice mod_rewrite para enrutar todo a un único archivo index.php. Luego, verifique la variable en $_SERVER['REQUEST_URI'] dentro de este archivo para enviarla al controlador requerido.

Esta configuración permitirá mod_rewrite, si está instalado:

DirectorySlash Off 
Options FollowSymLinks Indexes 
DirectoryIndex index.php 

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [L] 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^.*$ - [L] 

RewriteRule ^.*$ index.php [L] 
+0

Gracias. ¿Es necesaria la parte "Índices FollowSymLinks de Opciones"? Mi host parece fallar con él (Error interno del servidor). Sin él obtengo "La URL solicitada /appname/index.php no se encontró en este servidor" al intentar acceder a alguna página que no sea el índice. Tal vez sería mejor olvidarse de Apache y descubrir cómo renderizar las plantillas en HTML ~ antes ~ Subo cualquier cosa al servidor ... –

+0

'FollowSymlinks' solo es necesario si usa enlaces simbólicos. Probablemente no sea estrictamente necesario. 'Indexes' * es * necesario, ya que de lo contrario solicitar'/'no representará' index.php'. Cuando obtienes 'Internal Server Error', busca en el registro de errores de Apache para ver cuál es el problema. – troelskn

+0

Renderizar archivos sin conexión es una buena idea por varias razones, pero en realidad puede ser bastante complejo. Si quiere esto, le sugiero que vaya con un paquete existente, como Jekyll. – troelskn

1

Es posible que desee utilizar PEAR de Net_URL_Mapper.

+0

Parece genial. Tengo que darle una oportunidad. Gracias. :) –

2

Como trolskn (1) describe:

Uso mod_rewrite para enrutar todo a un solo archivo index.php. Luego, verifique la variable en $_SERVER['REQUEST_URI'] dentro de este archivo para enviarla al controlador requerido.

Pero encontré la siguiente .htaccess (colocado en la carpeta con el index.php que debe "consumir" todo lo que después de él) mucho más útil:

Options -MultiViews 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [QSA,L] 

También me gustaría señalar que pueden surgir el mensaje

.htaccess: Invalid command 'RewriteEngine', perhaps misspelled 
or defined by a module not included in the server configuration 

Esto puede ser resuelto fácilmente con sudo a2enmod rewrite && sudo service apache2 restart (source)

+1

Gracias. +1 en :) –

Cuestiones relacionadas