将Wordpress博客路由到Rails子文件夹 - 博客链接未更改

时间:2015-04-03 00:23:14

标签: ruby-on-rails ruby wordpress heroku

我目前有一个Rails应用程序my_app.com和一个关联的Wordpress博客blog.my_app.com。它们都在Heroku上独立运行(即没有Apache或Nginx脚本)

我正在尝试将博客移动到Rails应用程序的子文件夹my_app.com/blog,而不会丢失任何博客现有的SEO'汁液。

我已经实现了机架反向代理宝石,博客的主页尽职尽责地出现在http://my_app.com/blog/。但是,博客中嵌入的所有链接仍然指向子域而不是应用程序的博客文件夹。

如何配置博客到http://my_app.com/blog/post1的链接,而不是blog.my_app.com/post1 ??

我的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

在我的routes.rb中:

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

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

在我的ApplicationController中:

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

我的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>

3 个答案:

答案 0 :(得分:2)

听起来您需要做的就是更新WordPress网站中的网址以使用新方案。最简单的方法是在数据库中执行搜索和替换:

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

然而,有一点需要注意。 WordPress将大量序列化数据存储在数据库中。序列化字符串具有定义的长度,因此只更改字符串而不更新长度将导致问题。

我喜欢使用this utility来更新WordPress中的链接。它将对数据库执行搜索和替换,并将正确更新序列化数据。如果出现问题,请确保备份数据库。

答案 1 :(得分:0)

如果您在谈论手动输入的链接,那么mtinsley的回答是正确的。但是,如果您正在谈论由WordPress自动生成的链接,那么答案就更容易了!您只需进入WordPress管理员并将网站网址更改为http://my_app.com/blog/

然而,这有一个很大的警告。你正试图带上你的“链接果汁”。如果blog.my_app.com/some/post没有重定向到my_app.com/blog/some/post,那么您将不会保留链接汁。

要解决此问题,您需要设置htaccess规则或查找自动创建从blog.my_app.com/some/post到my_app.com/blog/some/post的重定向的WordPress插件。此外,请确保blog.my_app.com在转换期间继续解析到您的博客站点。

答案 2 :(得分:0)

实际上,这是Wordpress最令我烦恼的事情之一。它真的不是为了被移动而设计的。分布在整个数据库中的设置和内部链接绝对指定,而不是相对于Wordpress基础。当你想要做每个专业网站应该做的事情时,这会让你感到很痛苦:设置一个临时实例,只有当你设置好所有东西时才将其移动到实时服务器。

幸运的是,这是解决此问题的绝佳工具: https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

它执行数据库范围的搜索和替换,它会自动解决PHP序列化值的问题,如果您尝试自行执行此操作,则会出现这些问题。您可以将其限制为仅限于某些表,并且可以在执行它们之前预览它将进行的更改。每当您移动Wordpress安装时,请使用此工具搜索旧URL并将其替换为新URL。

相关问题