Enrutar el blog de WordPress a la subcarpeta de Rails: los enlaces del blog no cambiaron

4 minutos de lectura

avatar de usuario
tripulaciones dan

Actualmente tengo una aplicación de Rails, my_app.comy un blog de WordPress asociado, blog.my_app.com. Ambos se ejecutan de forma independiente en Heroku (es decir, sin secuencias de comandos de Apache o Nginx)

Estoy tratando de mover el blog a una subcarpeta de la aplicación Rails, my_app.com/blog sin perder nada del ‘jugo’ de SEO existente en el blog.

Implementé la gema rack-reverse-proxy y la página de inicio del blog aparece obedientemente en http://my_app.com/blog/ como se desee. Sin embargo, todos los enlaces incrustados en el blog aún apuntan al subdominio en lugar de a la carpeta del blog de la aplicación.

¿Cómo configuro los enlaces del blog para http://my_app.com/blog/post1 Opuesto a blog.my_app.com/post1??

Mi archivo config.ru:

require ::File.expand_path('../config/environment',  __FILE__)

use Rack::ReverseProxy do 
  reverse_proxy(/^\/blog(\/.*)$/, 'http://my-blog.herokuapp.com$1', opts = {:preserve_host => true})
end

use Rack::Deflater

run MyBlog::Application

En mi rutas.rb:

constraints domain: 'blog.my_app.com' do 
  get '(*path)' => 'application#blog'
end

get "/blog" => redirect("/blog/")

En mi controlador de aplicaciones:

def blog
  redirect_to "http://my_app.com{request.fullpath.gsub('/blog','')}", :status => :moved_permanently
end

Mi archivo WP .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine  On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

avatar de usuario
Mateo Tinsley

Parece que todo lo que necesita hacer es actualizar las URL en su sitio de WordPress para usar el nuevo esquema. La forma más fácil de hacer esto sería realizar una búsqueda y reemplazar en la base de datos:

Search: blog.my_app.com
Replace: my_app.com/blog

Sin embargo, hay una advertencia. WordPress almacena una gran cantidad de datos serializados en la base de datos. Las cadenas serializadas tienen una longitud definida, por lo que solo cambiar las cadenas sin actualizar la longitud causará problemas.

me gusta usar esta utilidad para actualizar enlaces en WordPress. Realizará una búsqueda y reemplazo en la base de datos y actualizará correctamente los datos serializados. Asegúrese de tener una copia de seguridad de su base de datos en caso de que algo salga mal.

avatar de usuario
nick urbano

Si está hablando de enlaces que ingresó manualmente, entonces la respuesta de mtinsley es correcta. Sin embargo, si está hablando de enlaces generados automáticamente por WordPress, ¡entonces la respuesta es aún más fácil! Solo tiene que ingresar al administrador de WordPress y cambiar la URL del sitio a http://mi_aplicación.com/blog/.

SIN EMBARGO, hay una gran advertencia con esto. Estás tratando de traer tu “jugo de enlace”. Si blog.my_app.com/some/post no redirige a my_app.com/blog/some/post, entonces no mantendrá su enlace activo.

Para solucionarlo, querrá configurar reglas de htaccess o encontrar un complemento de WordPress que cree automáticamente redireccionamientos desde blog.my_app.com/some/post a my_app.com/blog/some/post. Además, asegúrese de que blog.my_app.com continúe resolviéndose en su sitio de blog durante la transición.

De hecho, esta es una de las cosas que más me molestan de WordPress. Realmente no está diseñado para ser movido. Hay configuraciones y enlaces internos dispersos por toda la base de datos que se especifican absolutamente en lugar de en relación con la base de WordPress. Esto hace que sea una molestia cuando desea hacer algo que todo sitio web profesional debería hacer: configurar una instancia de prueba y moverla al servidor en vivo solo cuando tenga todo configurado correctamente.

Afortunadamente, existe una excelente herramienta para resolver este problema:
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

Realiza una búsqueda y reemplazo en toda la base de datos que resuelve automáticamente el problema con los valores serializados de PHP que surge si intenta hacerlo por su cuenta. Puede restringirlo solo a ciertas tablas y puede obtener una vista previa de los cambios que realizará antes de ejecutarlos. Cada vez que mueva una instalación de WordPress, use esta herramienta para buscar la URL anterior y reemplazarla por la nueva.

¿Ha sido útil esta solución?