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 originalrewriteEngine On
#URL Canonicalization
DirectoryIndex index.php index.htm index.html
IndexIgnore *
# -> Acceso Restringido - Error 401 - Error 404
#ErrorDocument 401 /errorpage/index401.php
ErrorDocument 404 /errorpage/index.php
RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php|html)\ HTTP
#############################################################################################
# :: ATENCIÓN :: #
# Para las reglas de [rewriteRule] se debe activar el módulo de rewrite_module de Apache #
# dentro del archivo de configuración [httpd.conf] #
#############################################################################################
rewriteRule ^(.*)index\.(php|html)$ /$1 [R=301,L]
# ========================================================================
# -> COLABORACIONES
# ------------------------------------------------------------------------
# -> Detalle
# ------> Para entrada inicial con primera imagen
# -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/carpeta/detalle/tit-COLid/
rewriteRule ^colaboraciones/(detalle)/.*-COL([0-9]+)/?$ colaboraciones/$1.php?id=$2 [L]
# ------> Para navegar entre diversas imágenes
# -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/carpeta/detalle/tit-COLid-numImg/
rewriteRule ^colaboraciones/(detalle)/.*-COL([0-9]+)-([0-9]+)/?$ colaboraciones/$1.php?id=$2&up=$3 [L]
# ........................................................................
# ---- [ PARA eu ] -------------------------------------------------------
# -> Detalle
# ------> Para entrada inicial con primera imagen
# -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/idioma/carpeta/detalle/tit-LNKid/
rewriteRule ^eu/lankidetzak/(fitxa)/.*-LNK([0-9]+)/?$ eu/colaboraciones/$1.php?id=$2 [L]
# ------> Para navegar entre diversas imágenes
# -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/idioma/carpeta/detalle/tit-LNKid-numImg/
rewriteRule ^eu/lankidetzak/(fitxa)/.*-LNK([0-9]+)-([0-9]+)/?$ eu/colaboraciones/$1.php?id=$2&up=$3 [L]
# ========================================================================
# -> CONCURSOS
# ------------------------------------------------------------------------
# -> Detalle
# ------> Para entrada inicial con primera imagen
# -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/carpeta/detalle/tit-CONid/
rewriteRule ^concursos/(detalle)/.*-CON([0-9]+)/?$ concursos/$1.php?id=$2 [L]
# ------> Para navegar entre diversas imágenes
# -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/carpeta/detalle/tit-CONid-numImg/
rewriteRule ^concursos/(detalle)/.*-CON([0-9]+)-([0-9]+)/?$ concursos/$1.php?id=$2&up=$3 [L]
# ........................................................................
# ---- [ PARA eu ] -------------------------------------------------------
# -> Detalle
# ------> Para entrada inicial con primera imagen
# -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/idioma/carpeta/detalle/tit-LHKid/
rewriteRule ^eu/lehiaketak/(fitxa)/.*-LHK([0-9]+)/?$ eu/concursos/$1.php?id=$2 [L]
# ------> Para navegar entre diversas imágenes
# -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/idioma/carpeta/detalle/tit-LHKid-numImg/
rewriteRule ^eu/lehiaketak/(fitxa)/.*-LHK([0-9]+)-([0-9]+)/?$ eu/concursos/$1.php?id=$2&up=$3 [L]
# ========================================================================
# -> PROYECTOS
# ------------------------------------------------------------------------
# -> Detalle
# ------> Para entrada inicial con primera imagen
# -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/carpeta/detalle/tit-PRYid/
rewriteRule ^proyectos/(detalle)/.*-PRY([0-9]+)/?$ proyectos/$1.php?id=$2 [L]
# ------> Para navegar entre diversas imágenes
# -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/carpeta/detalle/tit-PRYid-numImg/
rewriteRule ^proyectos/(detalle)/.*-PRY([0-9]+)-([0-9]+)/?$ proyectos/$1.php?id=$2&up=$3 [L]
# ........................................................................
# ---- [ PARA eu ] -------------------------------------------------------
# -> Detalle
# ------> Para entrada inicial con primera imagen
# -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/idioma/carpeta/detalle/tit-PRIid/
rewriteRule ^eu/proiektuak/(fitxa)/.*-PRI([0-9]+)/?$ eu/proyectos/$1.php?id=$2 [L]
# ------> Para navegar entre diversas imágenes
# -> Ejemplo de como se ve al final: http://www.xxxxxxx.xxx/idioma/carpeta/detalle/tit-PRIid-numImg/
rewriteRule ^eu/proiektuak/(fitxa)/.*-PRI([0-9]+)-([0-9]+)/?$ eu/proyectos/$1.php?id=$2&up=$3 [L]
# -> Habilitamos las funciones necesarias para soportar aplicaciones los desarrollos web antiguos
#php_value register_globals 1
#php_value register_long_arrays 1
#php_value allow_call_time_pass_reference 1
# -> Deshabilitamos php errors
#php_flag display_startup_errors off
#php_flag display_errors off
#php_flag html_errors on
#php_value docref_root 0
#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 originalOptions -MultiViews
RewriteEngine On
#... 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.