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

No se aplican los rewriterule en el servidor y va siempre a error 404

Estas en el tema de No se aplican los rewriterule en el servidor y va siempre a error 404 en el foro de Apache en Foros del Web. Hola a tod@s: En las programaciones web que he realizado hasta ahora, uso el .htaccess fundamentalmente, para redirigir a una página personalizada errores 404 y ...
  #1 (permalink)  
Antiguo 02/07/2011, 19:02
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 7 meses
Puntos: 3
No se aplican los rewriterule en el servidor y va siempre a error 404

Hola a tod@s:

En las programaciones web que he realizado hasta ahora, uso el .htaccess fundamentalmente, para redirigir a una página personalizada errores 404 y para hacer reescritura de URLs

Por el momento, no he tenido mayor si no es por alguna expresión regular que se me complica más de lo debido. Pero este no es el motivo de abrir este tema.

Generalmente, salvo alguna variación propia del proyecto llevado a cabo, este es el código de mi .htaccess que suelo poner:

Código Apache:
Ver original
  1. rewriteEngine On
  2. #URL Canonicalization
  3. DirectoryIndex index.php index.htm index.html
  4. IndexIgnore *
  5. # -> Acceso Restringido - Error 401 - Error 404
  6. #ErrorDocument 401 /errorpage/index401.php
  7. ErrorDocument 404 /errorpage/index.php
  8. RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php|html)\ HTTP
  9.  
  10. #############################################################################################
  11. # :: ATENCIÓN ::                                                                            #
  12. # Para las reglas de [rewriteRule] se debe activar el módulo de rewrite_module de Apache    #
  13. # dentro del archivo de configuración [httpd.conf]                                          #
  14. #############################################################################################
  15.  
  16. rewriteRule ^(.*)index\.(php|html)$ /$1 [R=301,L]
  17.  
  18. # ========================================================================
  19. # -> COLABORACIONES
  20. # ------------------------------------------------------------------------
  21. # -> Detalle
  22. # ------> Para entrada inicial con primera imagen
  23. # -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/carpeta/detalle/tit-COLid/
  24. rewriteRule ^colaboraciones/(detalle)/.*-COL([0-9]+)/?$ colaboraciones/$1.php?id=$2 [L]
  25. # ------> Para navegar entre diversas imágenes
  26. # -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/carpeta/detalle/tit-COLid-numImg/
  27. rewriteRule ^colaboraciones/(detalle)/.*-COL([0-9]+)-([0-9]+)/?$ colaboraciones/$1.php?id=$2&up=$3 [L]
  28. # ........................................................................
  29. # ---- [ PARA eu ] -------------------------------------------------------
  30. # -> Detalle
  31. # ------> Para entrada inicial con primera imagen
  32. # -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/idioma/carpeta/detalle/tit-LNKid/
  33. rewriteRule ^eu/lankidetzak/(fitxa)/.*-LNK([0-9]+)/?$ eu/colaboraciones/$1.php?id=$2 [L]
  34. # ------> Para navegar entre diversas imágenes
  35. # -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/idioma/carpeta/detalle/tit-LNKid-numImg/
  36. rewriteRule ^eu/lankidetzak/(fitxa)/.*-LNK([0-9]+)-([0-9]+)/?$ eu/colaboraciones/$1.php?id=$2&up=$3 [L]
  37.  
  38. # ========================================================================
  39. # -> CONCURSOS
  40. # ------------------------------------------------------------------------
  41. # -> Detalle
  42. # ------> Para entrada inicial con primera imagen
  43. # -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/carpeta/detalle/tit-CONid/
  44. rewriteRule ^concursos/(detalle)/.*-CON([0-9]+)/?$ concursos/$1.php?id=$2 [L]
  45. # ------> Para navegar entre diversas imágenes
  46. # -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/carpeta/detalle/tit-CONid-numImg/
  47. rewriteRule ^concursos/(detalle)/.*-CON([0-9]+)-([0-9]+)/?$ concursos/$1.php?id=$2&up=$3 [L]
  48. # ........................................................................
  49. # ---- [ PARA eu ] -------------------------------------------------------
  50. # -> Detalle
  51. # ------> Para entrada inicial con primera imagen
  52. # -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/idioma/carpeta/detalle/tit-LHKid/
  53. rewriteRule ^eu/lehiaketak/(fitxa)/.*-LHK([0-9]+)/?$ eu/concursos/$1.php?id=$2 [L]
  54. # ------> Para navegar entre diversas imágenes
  55. # -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/idioma/carpeta/detalle/tit-LHKid-numImg/
  56. rewriteRule ^eu/lehiaketak/(fitxa)/.*-LHK([0-9]+)-([0-9]+)/?$ eu/concursos/$1.php?id=$2&up=$3 [L]
  57.  
  58. # ========================================================================
  59. # -> PROYECTOS
  60. # ------------------------------------------------------------------------
  61. # -> Detalle
  62. # ------> Para entrada inicial con primera imagen
  63. # -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/carpeta/detalle/tit-PRYid/
  64. rewriteRule ^proyectos/(detalle)/.*-PRY([0-9]+)/?$ proyectos/$1.php?id=$2 [L]
  65. # ------> Para navegar entre diversas imágenes
  66. # -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/carpeta/detalle/tit-PRYid-numImg/
  67. rewriteRule ^proyectos/(detalle)/.*-PRY([0-9]+)-([0-9]+)/?$ proyectos/$1.php?id=$2&up=$3 [L]
  68. # ........................................................................
  69. # ---- [ PARA eu ] -------------------------------------------------------
  70. # -> Detalle
  71. # ------> Para entrada inicial con primera imagen
  72. # -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/idioma/carpeta/detalle/tit-PRIid/
  73. rewriteRule ^eu/proiektuak/(fitxa)/.*-PRI([0-9]+)/?$ eu/proyectos/$1.php?id=$2 [L]
  74. # ------> Para navegar entre diversas imágenes
  75. # -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/idioma/carpeta/detalle/tit-PRIid-numImg/
  76. rewriteRule ^eu/proiektuak/(fitxa)/.*-PRI([0-9]+)-([0-9]+)/?$ eu/proyectos/$1.php?id=$2&up=$3 [L]
  77.  
  78.  
  79. # -> Habilitamos las funciones necesarias para soportar aplicaciones los desarrollos web antiguos
  80. #php_value register_globals 1
  81. #php_value register_long_arrays 1
  82. #php_value allow_call_time_pass_reference 1
  83.  
  84. # -> Deshabilitamos  php errors
  85. #php_flag display_startup_errors off
  86. #php_flag display_errors off
  87. #php_flag html_errors on
  88. #php_value docref_root 0
  89. #php_value docref_ext 0


Como he dicho, en muchos otros proyectos funcionan correctamente las reglas. Y en proyecto web al que pertenece este .htaccess, de manera local, en mi ordenador también.

Pero al subirlo al servidor oficial, en de hacer y aplicar la rewriterule correspondiente, siempre me dirige a la página de error 404.
Y ni siquiera a la indicada por mí en dicho .htaccess sino a la propia del servidor.

Lo primero que se me ocurrió pensar es que en el servidor no estuviese activado el módulo de rewrite_module de Apache

Así que terminamos llamando al soporte técnico del servidor. Y nos dijo que si estaba activado

Luego, buscando en Google, encontré que para que funcionara un .htaccess dentro de <Directory "ruta-al-/httpdocs-de-la-web"> debe estar la directiva AllowOverride All
Y me dijeron que también estaba así.

En esta segunda llamada, me dijeron también que para la reescritura debía poner en mi .htaccess el RewriteEngine On, cosa que ya tenía.
También me dijeron de poner el Options MultiViews (no sé si con - o con + o sin nada delante de MultiViews) antes de RewriteEngine On
Y me llego a decir algo más que no se me llego a quedar y cuando quise que me lo recordara para apuntarlo bien, me empezo a decir que ellos no prestaban soporte de programación. Y me quede tal cuál

Llegué a probar lo del Options MultiViews, poniendo:

Código Apache:
Ver original
  1. Options -MultiViews
  2. RewriteEngine On
  3. #... todo lo demás ya indicado antes

Ahora ya me redirige a mi página de error si se produce el error 404.
Pero sigo sin conseguir la aplicación de los rewriterule, y siempre me va por el error 404.

Me debe de faltar algo necesario según la configuración que tengan ellos en su servidor. Por si alguien tiene experiencia, la web está alojada dentro de un servidor de 1&1.

Resumiendo, no sé por qué debo poner lo del Options -MultiViews para que me funcione el ErrorDocument 404 /errorpage/index.php

Y no sé por qué no se aplican los rewriterule (que si de manera local) y siempre termino en la página de error 404 por no encontrar el archivo demandado

¿Puede ser algo como el RewriteBase / a poner después del RewiteEngine On?


Nota: aunque he llegado a buscar el significado de Options MultiViews y RewriteBase, no llego a entender para que sirven. Si alguien me lo explica ya de paso.
__________________
Saludos,

zacktagnan.
=================================================
  #2 (permalink)  
Antiguo 03/07/2011, 03:43
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: No se aplican los rewriterule en el servidor y va siempre a error 404

En primer lugar establece
Código Apache:
Ver original
  1. Options +FollowSymLinks
en la primera linea de tu .htaccess

en segundo, no estoy seguro que alcances pueda tener el
Código Apache:
Ver original
  1. IndexIgnore *
que pusiste, comentalo provisionalmente

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 11/07/2011, 03:20
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 7 meses
Puntos: 3
Respuesta: No se aplican los rewriterule en el servidor y va siempre a error 404

Hola a tod@s:

Gracias emprear por tu respuesta. Probé lo que sugeriste pero lo del Options +FollowSymLinks no era la solución y lo del IndexIgnore * no era lo que daba problemas.

Al final, se me resolvió el problema poniendo lo siguiente, con lo cuál ya me funcionan los rewriterule (gracias a poner lo del RewriteBase /). Así que para todo el que le pueda interesar:

Código PHP:
Ver original
  1. Options -MultiViews
  2. RewriteEngine On
  3. RewriteBase /
  4.  
  5. #URL Canonicalization
  6. DirectoryIndex index.php index.htm index.html
  7. IndexIgnore *
  8.  
  9. #... más todo el posterior contenido ya indicado antes en el post inicial

Nada más.
__________________
Saludos,

zacktagnan.
=================================================
  #4 (permalink)  
Antiguo 21/07/2011, 06:16
 
Fecha de Ingreso: julio-2011
Mensajes: 3
Antigüedad: 13 años, 3 meses
Puntos: 0
Pregunta Respuesta: No se aplican los rewriterule en el servidor y va siempre a error 404

Hola!

tengo el mismo problema pero al revés. En el servidor funciona todo ok, pero en local muchos enlaces me dan el error 404. He probado lo que indicas pero en mi caso no obtengo nada diferente.

Puedo entrar a algunas páginas si en vez de el enlace redireccionado pongo el original. Por ejemplo, estas 2 direcciones son equivalentes, se redirecciona a la primera en el .htaccess. Si entro con la primera error, con la segunda entra:
- localhost/servidor/kanalpro : da error 404
- localhost/servidor/index.php?empresas=2 : entra en la página.

No sé a qué puede deberse... y ya no sé qué más probar... creo q debe ser algún parámetro de configuración que se me escapa...

Ah! estoy trabajando con Xampplite, con la version de PHP 5.1.6 y Apache 2.2.3 pq así lo requería el proyecto.


Tengo 4 ficheros .htaccess en mi proyecto.
  • En la raiz del proyecto:

Cita:
<IfModule mod_rewrite.c>
RewriteEngine On

# PAGINA ACCESO EMPRESAS
RewriteCond %{HTTP_HOST} ^servidor [NC]
RewriteRule ^empresas$ index.php?empresas=1 [L]

RewriteRule ^empresas$ /index.php?empresas=1 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php?empresas=1\ HTTP/
RewriteRule ^index\.php$ /empresas? [R=301,L]

# PAGINA ACCESO KANAL
# RewriteCond %{HTTP_HOST} ^servidor [NC]
RewriteCond %{HTTP_HOST} ^localhost/servidor [NC]
RewriteRule ^kanalpro$ index.php?empresas=2 [L]

RewriteRule ^kanalpro$ /index.php?empresas=2 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php?empresas=2\ HTTP/
RewriteRule ^index\.php$ /kanalpro? [R=301,L]

# PAGINA ACCESO PANEL ADMINISTRADOR
#RewriteRule ^admin$ /admin/index.php [L]
#RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /admin\ HTTP/
RewriteCond %{HTTP_HOST} ^servidor [NC]
RewriteRule ^admin$ /carpeta/admin/index.php? [R=301,L]

RewriteRule ^admin$ /admin/index.php? [R=301,L]

# PAGINA HOME KANALPRO
RewriteCond %{HTTP_HOST} ^servidor [NC]
RewriteRule ^([a-zA-z0-9\-]+)$ home.php?nick=$1 [L]

RewriteRule ^([a-zA-z0-9\-]+)$ /home.php?nick=$1 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /home\.php?nick=([a-zA-z0-9\-]+)\ HTTP/
RewriteRule ^home\.php$ /%1? [R=301,L]

#RewriteCond %{HTTP_HOST} ^servidor [NC]
#RewriteRule ^([a-zA-z0-9\-]+)$ profesional.php?nick=$1 [L]

#RewriteRule ^([a-zA-z0-9\-]+)$ /profesional.php?nick=$1 [L]
#RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /profesional\.php?nick=([a-zA-z0-9\-]+)\ HTTP/
#RewriteRule ^profesional\.php$ /%1? [R=301,L]

# PAGINA KEDADA EN KANALPRO
RewriteCond %{HTTP_HOST} ^servidor [NC]
RewriteRule ^([a-zA-z0-9\-]+)/kedada-([0-9]+).html$ profesional.php?nick=$1&kedada=$2 [L]

RewriteRule ^([a-zA-z0-9\-]+)/kedada-([0-9]+).html$ /profesional.php?nick=$1&kedada=$2 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /profesional\.php?nick=([a-zA-z0-9\-]+)$kedada=([0-9]+)\ HTTP/
RewriteRule ^profesional\.php$ /%1/kedada-%2.html? [R=301,L]

</IfModule>
  • En una subcarpeta del proyecto:
Cita:
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^empresas$ /index.php?empresas=1 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php?empresas=1\ HTTP/
RewriteRule ^index\.php$ /empresas? [R=301,L]

RewriteRule ^kanalpro$ /index.php?empresas=2 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php?empresas=2\ HTTP/
RewriteRule ^index\.php$ /kanalpro? [R=301,L]

#RewriteRule ^admin$ /admin/index.php [L]
#RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /admin\ HTTP/
RewriteRule ^admin$ /admin/index.php? [R=301,L]

RewriteRule ^([a-zA-z0-9\-]+)$ /profesional.php?nick=$1 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /profesional\.php?nick=([a-zA-z0-9\-]+)\ HTTP/
RewriteRule ^profesional\.php$ /%1? [R=301,L]

RewriteRule ^([a-zA-z0-9\-]+)/kedada-([0-9]+).html$ /profesional.php?nick=$1&kedada=$2 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /profesional\.php?nick=([a-zA-z0-9\-]+)$kedada=([0-9]+)\ HTTP/
RewriteRule ^profesional\.php$ /%1/kedada-%2.html? [R=301,L]

</IfModule>
  • En otra subcarpeta
Cita:
php_value engine off
  • En otra subcarpeta
Cita:
#
# Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
# For licensing, see LICENSE.html or http://ckeditor.com/license
#

#
# On some specific Linux installations you could face problems with Firefox.
# It could give you errors when loading the editor saying that some illegal
# characters were found (three strange chars in the beginning of the file).
# This could happen if you map the .js or .css files to PHP, for example.
#
# Those characters are the Byte Order Mask (BOM) of the Unicode encoded files.
# All FCKeditor files are Unicode encoded.
#

AddType application/x-javascript .js
AddType text/css .css

#
# If PHP is mapped to handle XML files, you could have some issues. The
# following will disable it.
#

AddType text/xml .xml
  #5 (permalink)  
Antiguo 07/08/2011, 11:52
 
Fecha de Ingreso: julio-2011
Mensajes: 3
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: No se aplican los rewriterule en el servidor y va siempre a error 404

El error estaba en que el cliente utilizaba una versión de apache más antigua que la nuestra.
Por si os sirve.
Saludos!!
  #6 (permalink)  
Antiguo 08/08/2011, 17:41
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 7 meses
Puntos: 3
Respuesta: No se aplican los rewriterule en el servidor y va siempre a error 404

Enhorabuena para tí, kirakirakira

Me parece que tienes mucho más nivel que yo en cuanto a la configuración del htaccess.

¿Cómo aprendiste a configurarlo, algún tutorial o manual avanzado y completo que me recomiendes?
¿Se pueden poner condicionales en un htaccess para hacer un rewriterule u otro según llegue un parámetro específico u otro?
Por ejemplo, ¿para qué sirve el "<IfModule mod_rewrite.c>...</IfModule>"? ¿Es una especie de condición para ver si el module_rewrite está activo?
__________________
Saludos,

zacktagnan.
=================================================
  #7 (permalink)  
Antiguo 08/08/2011, 17:54
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: No se aplican los rewriterule en el servidor y va siempre a error 404

Cita:
Iniciado por zacktagnan Ver Mensaje
Enhorabuena para tí, kirakirakira
Por ejemplo, ¿para qué sirve el "<IfModule mod_rewrite.c>...</IfModule>"? ¿Es una especie de condición para ver si el module_rewrite está activo?
Exactamente para eso,
En cuanto a aprender
instala Apache en tu Pc, leer el manual de Apache, algo básico sobre expresiones Regulares y a practicar mucho


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #8 (permalink)  
Antiguo 09/08/2011, 05:27
 
Fecha de Ingreso: julio-2011
Mensajes: 3
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: No se aplican los rewriterule en el servidor y va siempre a error 404

Cita:
Iniciado por zacktagnan Ver Mensaje
Enhorabuena para tí, kirakirakira

Me parece que tienes mucho más nivel que yo en cuanto a la configuración del htaccess.

¿Cómo aprendiste a configurarlo, algún tutorial o manual avanzado y completo que me recomiendes?
¿Se pueden poner condicionales en un htaccess para hacer un rewriterule u otro según llegue un parámetro específico u otro?
Por ejemplo, ¿para qué sirve el "<IfModule mod_rewrite.c>...</IfModule>"? ¿Es una especie de condición para ver si el module_rewrite está activo?
Encontré este foro donde está mi problema bastante bien explicado: http://www.phwinfo.com/forum/alt-apache-configuration/182246-yikes-mod_rewrite-c-mystery-where-download.html

Por lo demás aprendí con google y buscando y leyendo.

Las líneas <IfModule mod_rewrite.c> se utilizaban para el módulo rewrite de las versiones 1.x de Apache

Saludos!

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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 10:14.