Foros del Web » Administración de Sistemas » Apache »

Redireccionar a index.php

Estas en el tema de Redireccionar a index.php en el foro de Apache en Foros del Web. Buenas, quiero redireccionar mi página siempre a index.php, pero no lo consigo y no se si es problema mio o del servidor, pondré un ejemplo ...
  #1 (permalink)  
Antiguo 10/11/2011, 16:37
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 15 años, 4 meses
Puntos: 0
Redireccionar a index.php

Buenas, quiero redireccionar mi página siempre a index.php, pero no lo consigo y no se si es problema mio o del servidor, pondré un ejemplo práctico, a ver que falla.

index.php
Código PHP:
Ver original
  1. <?
  2. $pagina = conseguir_pagina();
  3. // echo $pagina;
  4. ?>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  6.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  7. <html xmlns="http://www.w3.org/1999/xhtml">
  8.     <head>
  9.         <?php include_once "comun/head.php"; ?>
  10.     </head>
  11.     <body>
  12.         <div id="web">
  13.             <?php include_once "comun/cabecera.php"; ?>
  14.             <div id="menu">
  15.                 <?php include_once "comun/menu.php"; ?>
  16.             </div>
  17.             <div id="pagina">
  18.                 <div id="borde">
  19.                     <div id="contenido">                   
  20.                     <?php
  21.                         if (($pagina) != '')
  22.                             include_once "paginas/".$pagina.".php";
  23.                         else
  24.                             include_once "paginas/portada.php";
  25.                     ?>
  26.                     </div>
  27.                     <div id="lateral">
  28.                         <?php include_once "comun/lateral.php"; ?>
  29.                     </div>
  30.                 </div>
  31.             </div>
  32.             <div id="pie">
  33.                 <?php include_once "comun/pie.php"; ?>
  34.             </div>
  35.         </div>
  36.     </body>
  37. </html>

.htaccess
Código:
# Pagina escrita en UTF-8
AddDefaultCharset UTF-8

# Desactivar magic quotes
php_value magic_quotes_gpc off

# Reescribir la URL
RewriteEngine on

Options +FollowSymlinks 
# Usar este metodo si no se requiere descarga de ficheros.
RewriteRule ^!\.(js|ico|gif|jpg|png|css|csv)$ index.php [L]


# Comprimir ficheros
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript

# (ocultamos errores en el servidor)
ErrorDocument 400 "PETICIÓN INCORRECTA"
ErrorDocument 401 "DOCUMENTO NO ACCESIBLE"
ErrorDocument 403 "DOCUMENTO NO ACCESIBLE"
ErrorDocument 404 "DOCUMENTO NO ENCONTRADO"
ErrorDocument 500 "HUBO ERRORES EN EL SERVIDOR"
con "RewriteRule ^!\.(js|ico|gif|jpg|png|css|csv)$ index.php [L]", quiero decir que todo lo que no sea un archivo de esos tipos, me redireccione a index.php, creo que está bien. La cosa es tal, que si cambio esta línea "ErrorDocument 404 "DOCUMENTO NO ENCONTRADO"", por "ErrorDocument 404 "/index.php"", me redirecciona a index.php, y funciona correctamente, pero claro está tirando un error 404, ¿que hago mal?¿que problema hay?
El servidor es gratuito, pero he comprobado que permite el mod_rewrite, es 000webhost.
  #2 (permalink)  
Antiguo 11/11/2011, 12:09
Avatar de charlyalegret  
Fecha de Ingreso: septiembre-2011
Ubicación: Barcelona
Mensajes: 705
Antigüedad: 12 años, 7 meses
Puntos: 140
Respuesta: Redireccionar a index.php

Hola. No he entendido bien... si haces el cambio de la linea que comentas, cualquier cosa que pongas te dirige a la página index.php pero como si se tratase de un error? Entonces, si dejas la linea como está, y escribes cualquier cosa, me imagino que te sale "documento no encontrado", no?

- Prueba de poner RewriteBase / antes de la Regla.

Por otro lado, no se si esa regla que pusistes es correcta o no (no tengo tantos conocimientos...) pero se me ocurre probar:

RewriteRule ^!(.*)\.(js|ico|gif|jpg|png|css|csv)$ index.php [L]

o bien a la inversa:

RewriteRule ^(.*)\.(htm|html|php)$ index.php [L] ---> archivos con extensión
RewriteRule ^(.*)/$ index.php [L] ----> carpetas
RewriteRule ^([a-zA-Z0-9_-]+) index.php [L] ------> nombres sin extensión (sin puntos)

Por cierto que en la expresión que escogiste, yo también incluiría los archivos .txt y .xls ya que también hay que contar con sitemaps, robots.txt....

Finalmente comentar que con una regla como la que propones, puedes encontrarte con el problema de que si te interesa que google te indexe, te encontrará un montón de páginas con el mismo contenido: penalización por contenido duplicado.

Quizá podrías plantearte usar una redirección 301, de manera que escribas lo que escribas, siempre lleve a la página index.php, y en el navegador y los buscadores lo interpreten como eso, la página index.php (las redirecciones de RewriteRule, en realidad lo que haces es que una url se interprete como otra, pero tanto el navegador como los buscadores interpretarán que la página en la que te encuentras es aquella que has escrito como url... no se si me explico...) En tal caso, basta añadir: [L, R=301] a las reglas anteriores.

Saludos y suerte
  #3 (permalink)  
Antiguo 15/11/2011, 09:14
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Redireccionar a index.php

Cita:
Iniciado por charlyalegret Ver Mensaje
Hola. No he entendido bien... si haces el cambio de la linea que comentas, cualquier cosa que pongas te dirige a la página index.php pero como si se tratase de un error? Entonces, si dejas la linea como está, y escribes cualquier cosa, me imagino que te sale "documento no encontrado", no?

- Prueba de poner RewriteBase / antes de la Regla.

Por otro lado, no se si esa regla que pusistes es correcta o no (no tengo tantos conocimientos...) pero se me ocurre probar:

RewriteRule ^!(.*)\.(js|ico|gif|jpg|png|css|csv)$ index.php [L]

o bien a la inversa:

RewriteRule ^(.*)\.(htm|html|php)$ index.php [L] ---> archivos con extensión
RewriteRule ^(.*)/$ index.php [L] ----> carpetas
RewriteRule ^([a-zA-Z0-9_-]+) index.php [L] ------> nombres sin extensión (sin puntos)

Por cierto que en la expresión que escogiste, yo también incluiría los archivos .txt y .xls ya que también hay que contar con sitemaps, robots.txt....

Finalmente comentar que con una regla como la que propones, puedes encontrarte con el problema de que si te interesa que google te indexe, te encontrará un montón de páginas con el mismo contenido: penalización por contenido duplicado.

Quizá podrías plantearte usar una redirección 301, de manera que escribas lo que escribas, siempre lleve a la página index.php, y en el navegador y los buscadores lo interpreten como eso, la página index.php (las redirecciones de RewriteRule, en realidad lo que haces es que una url se interprete como otra, pero tanto el navegador como los buscadores interpretarán que la página en la que te encuentras es aquella que has escrito como url... no se si me explico...) En tal caso, basta añadir: [L, R=301] a las reglas anteriores.

Saludos y suerte
Buenas charlyalegret, gracias por tu respuesta, aún no he probado lo que me dices, pero en cualquier caso quiero comentarte porque quiero redireccionar hacia index.php.

Es la forma que se me ha ocurrido para reutilizar código. Si ves, index.php, tiene varios archivos con "include", y esos son comunes a todas las páginas que tengo, guardados en la carpeta "comun", y dentro de contenido cargo cada página, así la página principal se carga con "portada.php", si le doy "elemento1", cargaría "elemento1.php", y en la url sería "www.dominio.com/portada/" o "www.dominio.com/elemento1/", ya que en "comun/menu.php" el href=portada/ o href=elemento1/...entonces la pregunta es, ¿se te ocurre alguna forma de hacerlo para reutilizar código?
  #4 (permalink)  
Antiguo 15/11/2011, 10:23
Avatar de charlyalegret  
Fecha de Ingreso: septiembre-2011
Ubicación: Barcelona
Mensajes: 705
Antigüedad: 12 años, 7 meses
Puntos: 140
Respuesta: Redireccionar a index.php

Hola. Lo normal en estos casos es distinguir las variables en las url. Por ejemplo

index.php?id=portada podría ser la página principal, cargando portada.php
index.php?id=elemento1 sería cargando el elemento1.php

En el index.php, coges esa variable con $_GET['id'], y luego aplicas el if con esta variable. Así tendrás una url para cada página.
Luego viene el convertir estas url en amigables, en htacces, algo como por ej.

RewriteRule ^(.+)\.html$ /index.php?id=$1

esta regla simple te transformaria

midominio.com/portada.html a index.php?id=portada
midominio.com/elemento1.html a index.php?id=elemento1

etc etc, pero ya depende de ti poner o no extensión, dejar la portada como midominio.com y no como midominio.com/portada.html, etc, etc,

Si desconoces todo esto, te recomiendo leer o practicar un poco sobre el tema!

Pero si quieres que tu página sea indexada por completo, que aparezca en los buscadores, etc etc, tener páginas dinámicas sin que cambie la url es muy negativo! otra cosa es que se trate de una página personal o privada...

Saludos
  #5 (permalink)  
Antiguo 15/11/2011, 14:59
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Redireccionar a index.php

@alavaros:
Cual es el objeto de lo que querés hacer, el que ya lo has expresado, pero cual es la finalidad?

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: htaccess
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 15:58.