Foros del Web » Programando para Internet » PHP »

Problema con webmodular

Estas en el tema de Problema con webmodular en el foro de PHP en Foros del Web. Buenas, Resulta que estoy construyendo un diseño modular de la siguiente manera (acepto todo tipo de sugerencias!!!) Tengo mi index.php donde cargo todos los módulos, ...
  #1 (permalink)  
Antiguo 10/06/2010, 00:13
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Problema con webmodular

Buenas,

Resulta que estoy construyendo un diseño modular de la siguiente manera (acepto todo tipo de sugerencias!!!)

Tengo mi index.php donde cargo todos los módulos, cabecera, metas, pie de pagina, etc y el contenido.

La parte central de la pagina tiene un switch

Código PHP:
Ver original
  1. <?
  2. $id=$_GET['pagina'];
  3. switch ($id) {
  4.    case 'faq':
  5.        include("pages/ayuda/faq.php");
  6.        break;
  7.    case 'soporte':
  8.        include("pages/ayuda/soporte.php");
  9.        break;
  10.    case 'servicios':
  11.        include("pages/servicios.php");
  12.        break;
  13.     case 'directorio':
  14.         $apartado=$_GET['apartado'];
  15.         switch ($apartado) {
  16.             case 'futbol':
  17.                 include("pages/directorio/futbol.php");
  18.                 break;
  19.             case 'tenis':
  20.                 include("pages/directorio/tenis.php");
  21.                 break;
  22.              default:
  23.                 include("pages/404.php");
  24.         };
  25.         break;
  26.    default:
  27.        include("pages/404.php");
  28. }
  29. ?>

Esto funcionaria tal que así

miweb.com/index.php/?pagina=faq

o si entran en alguna subpagina
miweb.com/index.php/?pagina=directorio&apartado=tenis

Todo esto con un .htaccess como el que sigue, para cada sección tengo que crear una linea como la siguiente

Código Apache:
Ver original
  1. RewriteRule ^equipo_me/$ /index.php?pagina=equipo_me [L]
  2. RewriteRule ^nosotros/$ /index.php?pagina=nosotros [L]
  3. RewriteRule ^proximos-partidos/$ /index.php?pagina=proximos [L]
  4. #Rewriterule ^(.+)/(.+)/ index.php?pagina=$1&apartado=$2 [L]                                                           # SE LO TRAGA TODO
  5.  
  6.  
  7. RewriteRule ^faq/$ /index.php?pagina=faq [L]
  8. RewriteRule ^soporte/$ /index.php?pagina=soporte [L]
  9. #RewriteRule ^(.+)/$ /index.php?pagina=$1 [L]                                                                                                                          # SE LO TRAGA TODO

Mi problema es que si ponen una dirección que no existe, no redirecciona hacia una pagina 404, sino que muestra la página que esta definida en el switch como default, y esto no debería ser así... ya que si la dirección no existe debería dar un error 404 not found.

Esto pasa siempre y cuando quiero ahorrar lineas y pongo lineas como las siguientes
Rewriterule ^(.+)/(.+)/ index.php?pagina=$1&apartado=$2
RewriteRule ^(.+)/$ /index.php?pagina=$1

¿Cómo podría solucionarlo? La manera de implementar la web modular es correcta no? he leido varios ejemplos por la red, zonaphp, forosdelweb, etc...

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 10/06/2010, 03:06
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Problema con webmodular

La idea de htaccess es que sea lo más abstracto posible para que puedas redireccionar a un archivo y en ese archivo haces las verificaciones. Si haces muchas redirecciones en el htaccess, cuando hagas algún cambio a alguna página web, te vas a encontrar con muchos errores y dolores de cabeza. Te recomiendo que el htaccess solo coloques algo así
Código Apache:
Ver original
  1. #% -> puedes quitar esta línea, es para evitar un error con el highlight
  2. RewriteEngine On
  3. RewriteCond %{REQUEST_FILENAME} -s [OR]
  4. RewriteCond %{REQUEST_FILENAME} -l [OR]
  5. RewriteCond %{REQUEST_FILENAME} -d
  6. RewriteRule ^(.*)/?(.*)?$ index.php?pagina=$1&apartado=$2 [NC,L]
  7. RewriteRule ^.*$ pages/404.php [NC,L]
Las condiciones evalúan si existe o no el directorio y los archivos, si no existen entonces brinca el primer rewriteRule y pasa al segundo para mostrar una página de error. Si existe el archivo, entonces pasa al primer rewriteRule.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 10/06/2010, 05:25
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Problema con webmodular

Si lo hago así, no me detecta el CSS ni las imagenes

Incluso si pongo la dirección donde se encuentran los ficheros CSS, me aparece la pagina por defecto del switch argh!!

http://www.miweb.com/css/base.css

Cómo puedo solucionarlo?

Gracias de antemano!
  #4 (permalink)  
Antiguo 10/06/2010, 07:36
 
Fecha de Ingreso: febrero-2009
Mensajes: 218
Antigüedad: 15 años, 2 meses
Puntos: 9
Respuesta: Problema con webmodular

Probaste con la etiqueta <base> ?

Código HTML:
Ver original
  1. <base href="www.misitio.com" />
  #5 (permalink)  
Antiguo 10/06/2010, 09:47
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Problema con webmodular

Cita:
Iniciado por fernandozunni Ver Mensaje
Probaste con la etiqueta <base> ?

Código HTML:
Ver original
  1. <base href="www.misitio.com" />
Sí, tampoco detecta la URL de la hoja de estilo aunque la pongas absoluta en el navegador, es muy raro no? :S
  #6 (permalink)  
Antiguo 10/06/2010, 12:49
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Problema con webmodular

Buenas,

Acabo de subir la web a un entorno de pruebas, para poder enseñaros mejor los errores que produce.

http://www.webmodular.neodani.com/

Código index.php

Código PHP:
Ver original
  1. <?php
  2. /* DISEÑO MODULAR */
  3. include_once( $_SERVER [ 'DOCUMENT_ROOT' ]. '/includes/metatags.php' );
  4. include_once( $_SERVER [ 'DOCUMENT_ROOT' ]. '/includes/header.php' );
  5.  
  6. $id=$_GET['pagina'];
  7. switch ($id) {
  8.    case 'inicio':
  9.        include("pages/inicio.php");
  10.        break;
  11.    case 'faq':
  12.        include("pages/ayuda/faq.php");
  13.        break;
  14.    case 'soporte':
  15.        include("pages/ayuda/soporte.php");
  16.        break;
  17.    case 'servicios':
  18.        include("pages/servicios.php");
  19.        break;
  20.     case 'directorio':
  21.         $apartado=$_GET['apartado'];
  22.         switch ($apartado) {
  23.             case 'futbol':
  24.                 include("pages/directorio/futbol.php");
  25.                 break;
  26.             case 'tenis':
  27.                 include("pages/directorio/tenis.php");
  28.                 break;
  29.              default:
  30.                 include("pages/404.php");
  31.         };
  32.         break;
  33.    default:
  34.        include("pages/404.php");
  35. }
  36. ?>
  37. <p><a href="http://www.webmodular.neodani.com/faq">FAQ</a></p>
  38. <p><a href="http://www.webmodular.neodani.com/soporte">SOPORTE</a></p>
  39. <p><a href="http://www.webmodular.neodani.com/directorio/futbol">FUTBOL</a></p>
  40. <p><a href="http://www.webmodular.neodani.com/directorio/tenis">TENIS</a></p>
  41. </div>

Fichero .htaccess

Código Apache:
Ver original
  1. # Proteger fichero htaccess
  2. <Files .htaccess>
  3. order allow,deny
  4. deny from all
  5. </Files>
  6.  
  7. #Evitar que listen el contenido de las carpetas
  8. Options -Indexes
  9.  
  10. RewriteEngine on
  11. # WWW al dominio
  12. RewriteCond %{HTTP_HOST} !^www\.webmodular.neodani\.com$
  13. RewriteRule (.*) http://www.webmodular.neodani.com/$1 [R=301,L]
  14.  
  15. # Barra final a la direccion
  16. RewriteCond %{REQUEST_FILENAME} !-f
  17. RewriteCond %{REQUEST_URI} !(.*)/$
  18. RewriteRule (.*) http://www.webmodular.neodani.com/$1/ [L,R=301]
  19.  
  20. # WEB MODULAR
  21. RewriteCond %{REQUEST_FILENAME} -s [OR]
  22. RewriteCond %{REQUEST_FILENAME} -l [OR]
  23. RewriteCond %{REQUEST_FILENAME} -d
  24. RewriteRule ^(.*)/?(.*)?$ index.php?pagina=$1&apartado=$2 [NC,L]
  25. RewriteRule ^.*$ pages/404.php [NC,L]
  26.  
  27. # PRUEBAS COMENTADAS
  28. #########################################################
  29. #RewriteRule ^faq/$ /index.php?pagina=faq [L]
  30. #RewriteRule ^soporte/$ /index.php?pagina=soporte [L]
  31. #RewriteRule ^nosotros/$ /index.php?pagina=nosotros [L]
  32. ##########################################################
  33.  
  34. #Consigue usar la version 5 de php en lugar de la 4
  35. AddHandler application/x-httpd-php5 .php .php4 .php3 .phtml
  36.  
  37. #Compresion de archivos
  38. AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript application/javascript text/javascript


BIEN. Cuando escribes el dominio sin www te lo redirige al www
http://webmodular.neodani.com

MAL. No carga la pagina de inicio cuando se entra a la web

BIEN. Si accedes a las FAQ te pone la barra al final aunque no la pongas, y lo mismo que sin www, te las añade y te pone la barra al final
http://www.webmodular.neodani.com/faq
http://webmodular.neodani.com/faq/

MAL. Las paginas que estan en el switch interior (segundo nivel) no las carga
http://www.webmodular.neodani.com/directorio/futbol
http://www.webmodular.neodani.com/directorio/tenis

MAL. Las hojas de estilo tampoco las carga, ni poniendo en la cabecera
<base href="www.webmodular.neodani.com" />

Podéis ayudarme? ando bastante perdido

Muchas gracias de antemano!
  #7 (permalink)  
Antiguo 18/06/2010, 14:07
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Problema con webmodular

Sigo con problemas a la hora de crear un prototipo de webmodular y aplicarle las reglas mod_rewrite para que funcione correctamente.
La estructura la tengo, sin embargo el comportamiento que hace no lo entiendo

Si entráis en
http://www.webmodular.neodani.com/

Tarda mucho en cargar la página y me jugaría algo a qué es culpa del mod_rewrite ya que al final acaba mostrando pagina no encontrada, es como si probase varias condiciones hasta acabar no encontrando la página, no os parece?

El fichero .htaccess tiene esto ahora mismo

Código Apache:
Ver original
  1. # Proteger fichero htaccess
  2. <Files .htaccess>
  3. order allow,deny
  4. deny from all
  5. </Files>
  6.  
  7. #Evitar que listen el contenido de las carpetas
  8. Options -Indexes
  9.  
  10. RewriteEngine on
  11. # WWW al dominio
  12. RewriteCond %{HTTP_HOST} !^www\.webmodular.neodani\.com$
  13. RewriteRule (.*) http://www.webmodular.neodani.com/$1 [R=301,L]
  14.  
  15. # Barra final a la direccion
  16. RewriteCond %{REQUEST_FILENAME} !-f
  17. RewriteCond %{REQUEST_URI} !(.*)/$
  18. RewriteRule (.*) http://www.webmodular.neodani.com/$1/ [L,R=301]
  19.  
  20. # WEB MODULAR
  21. RewriteCond %{REQUEST_FILENAME} -s [OR]
  22. RewriteCond %{REQUEST_FILENAME} -l [OR]
  23. RewriteCond %{REQUEST_FILENAME} -d
  24. RewriteRule ^(.*)/?(.*)?$ index.php?pagina=$1&apartado=$2 [NC,L]
  25. RewriteRule ^.*$ pages/404.php [NC,L]

Porque no me muestra la página de inicio y no me carga el css?

Si veis el código fuente aparece esto, sin embargo por mas que hagas click en la ruta no funciona ninguna

<link rel="stylesheet" href="/css/reset.css" type="text/css" media="all"/>
<link rel="stylesheet" href="/css/base.css" type="text/css" media="all"/>
<link rel="stylesheet" href="/css/header.css" type="text/css" media="all"/>

Sabéis como solucionarlo? me aconsejáis otras reglas o modelo de web modular mas sencillo?

Estoy volviéndome loco

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:04.