z0mn
Información de contexto:
Busqué en stackoverflow una solución específica y no pude encontrar una que solucionara mi situación. Gracias de antemano por cualquier ayuda que pueda ofrecer. Su conocimiento es apreciado.
He decidido aceptar un contrato para “convertir” (en palabras del cliente) un sitio de Joomla en un sitio de WordPress. Todo va bien, excepto que el sitio de Joomla se vincula a archivos .html, tanto en su navegación como en el contenido de más de 100 publicaciones.
En lugar de revisar cada publicación una por una y actualizar los enlaces o ejecutar un comando SQL para eliminar “.html” de las URL, he decidido ejercer presión sobre .htaccess, con el que me siento algo cómodo.
Lo que estoy tratando de hacer ↓
En WordPress, tengo habilitados los enlaces permanentes personalizados, y es el siguiente: /%category%/%postname%
He aquí un ejemplo de lo que uno de los antiguo Las URL en las publicaciones se ven así:
http://the-site.com/category/the-webpage.html
Necesito el archivo htaccess para decirle al servidor web que elimine el .html para que el usuario, después de visitar “http://el-sitio.com/la-pagina-web.html” se envía en su lugar a:
http://the-site.com/category/the-webpage
Estoy configurando los resguardos de la página para que sigan el nombre del archivo de las páginas de Joomla, así que http://the-site.com/category/the-webpage trabajará.
Mi pregunta:
¿Me pueden ayudar a descubrir la solución para eliminar .html de la URL cuando alguien visita el sitio, incluso si el archivo HTML no existe en el servidor?
Así es como se veía el archivo .htaccess antes de hacer los cambios:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Aquí está el último archivo .htaccess a partir de 17:35 Oriental:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} \.html$
RewriteRule ^(.*)\.html$ $1 [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Los ↑últimos cambios de .htaccess funcionan. ¡Gracias Tim!
Esto funcionará para forzar una redirección externa a sus nuevas URL, pero esto puede no ser ideal para su situación. Todavía estoy tratando de pensar si hay una manera de mantener la redirección interna y actualizar la variable que usa WordPress para determinar qué página publicar, pero hasta ahora no he pensado en nada que funcione.
Completo .htaccess
:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} \.html$
RewriteRule ^(.*)\.html$ $1 [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
-
¡Eso fue todo, Tim! Actualizaré la publicación original para futuros visitantes con el mismo problema. Muchas muchas gracias.
– z0mn
27 de junio de 2010 a las 21:34
-
Una redirección 301 está bien, ya que las nuevas URL son permanentes. Gracias de nuevo.
– z0mn
27 de junio de 2010 a las 21:40
-
Absolutamente, y gracias de nuevo. Fue una de esas cosas, al diseñar/desarrollar un sitio, que sobresale en el fondo de tu mente diciéndote “No tengo idea de cómo voy a hacer que funcione”. Tú, mi amigo, eres un salvador. Gracias cien veces más.
– z0mn
28 de junio de 2010 a las 3:45
Quiere usar una reescritura de URL
RewriteEngine On
RewriteRule ^(.*)\.html$ $1
-
Probé esto agregándolo debajo del código que incluí anteriormente, pero me preocupa que haya un problema con las variables, ya que el archivo htaccess original incluye: RewriteRule ^index\.php$ – [L]
– z0mn
27 de junio de 2010 a las 20:38
-
¿Qué quiere decir exactamente con “problema con las variables”? Si coloca el código de Zurahn sobre las definiciones de reglas de WordPress, debería hacer lo que necesita sin ningún problema (suponiendo que no proporcione ningún archivo .html real).
–Tim Stone
27 de junio de 2010 a las 20:41
-
Tim, originalmente agregué el código de Zurahn debajo del código de WordPress. Lo agregué a la parte superior, y todavía no funciona. Es molesto, sí, y normalmente haría esto con buscar/reemplazar en phpMyAdmin, pero hay algunas publicaciones que enlazan con sitios web externos cuyas URL incluyen archivos HTML. Agregué cómo se ve el código en este momento a la publicación original.
– z0mn
27/06/2010 a las 21:00
-
Ah, no, tienes razón. Es porque WordPress debe usar
REQUEST_URI
para determinar la ruta de la solicitud, que no se ve afectada por una redirección interna. Obviamente, puede redirigir externamente, pero déjeme pensar si hay una manera de hacerlo internamente.–Tim Stone
27 de junio de 2010 a las 21:09
-
Muy apreciado hasta ahora, Tim. Si piensas en algo que pueda probar, publícalo en un nuevo comentario para que pueda darte apoyo.
– z0mn
27 de junio de 2010 a las 21:11
Esto debería hacerlo. Reescribirá una solicitud de site.com/category/whatever.html a site.com/category/whatever. no debería depender de la existencia del archivo solicitado.
<Directory /var/www/category>
RewriteEngine on
RewriteRule (.*)\.html$ /category/$1
</Directory>
Este es el formato para apache2.conf o archivos de host virtual. No estoy seguro si usa el comando en .htaccess. Es mejor ocuparse de ello en la configuración del servidor, si puede, ya que solo se analiza una vez, al iniciar el servidor, y htaccess se analiza en cada solicitud.
-
El sitio está alojado en Dreamhost, por lo que no tengo acceso a los archivos de configuración. Me preocupa que haya un problema con las variables, ya que el archivo htaccess original incluye: RewriteRule ^index\.php$ – [L]
– z0mn
27 de junio de 2010 a las 20:39
-
¿Variables? No hay variables involucradas en un archivo htaccess. Ellos $ significan el final de la línea, y $1 es una captura de una expresión regular. Solo tienen significado dentro de esa línea.
– JAL
27 de junio de 2010 a las 21:01
-
Está bien, entiendo eso finalmente. Actualicé el aspecto de mi .htaccess en este momento, y todavía resulta en un 404 cuando visito el-sitio.com/category/la-pagina web.html
– z0mn
27 de junio de 2010 a las 21:05
-
¿En qué se está reescribiendo? ¿404 dice que no se encuentra the-webpage.html u otro nombre de archivo?
– JAL
27 de junio de 2010 a las 21:07
-
La URL permanece igual (the-site.com/category/the-webpage.html), y WordPress me envía a la página 404 que diseñé.
– z0mn
27 de junio de 2010 a las 21:12
Le gustaría tener las reescrituras agregadas dentro del
<IfModule mod_rewrite.c
sección, también. Un [L] flag podría ser bueno para agregar aquí también, ya que tiene otras reescrituras después del html, y no se aplican.– JAL
27 de junio de 2010 a las 21:03
Moví las reescrituras dentro de la sección, y todavía me da un 404. ¿Podría esto tener algo que ver con las subcategorías y mi estructura de enlaces permanentes?
– z0mn
27 de junio de 2010 a las 21:09