Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/07/2011, 19:02
Avatar de zacktagnan
zacktagnan
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
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.
=================================================