将 Wordpress 博客路由到 Rails 子文件夹 - 博客链接未更改
Route Wordpress Blog to Rails Subfolder - Blog Links Not Changed
我目前有一个 Rails 应用 my_app.com
和一个关联的 Wordpress 博客 blog.my_app.com
。它们都 运行 独立于 Heroku(即没有 Apache 或 Nginx 脚本)
我正在尝试将博客移动到 Rails 应用程序的子文件夹中,my_app.com/blog
不会丢失博客的任何现有 SEO 'juice'。
我已经实现了 rack-reverse-proxy gem 并且博客的主页尽职尽责地显示在 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', 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>
听起来您需要做的就是更新 WordPress 站点中的 URL 以使用新方案。最简单的方法是在数据库中执行搜索和替换:
Search: blog.my_app.com
Replace: my_app.com/blog
但是有一个警告。 WordPress 在数据库中存储了大量的序列化数据。序列化的字符串具有定义的长度,因此仅更改字符串而不更新长度会导致问题。
我喜欢使用 this utility 来更新 WordPress 中的链接。它将在数据库上执行搜索和替换,并将正确更新序列化数据。确保您有数据库备份以防出现问题。
如果您谈论的是您手动输入的 link,那么 mtinsley 的回答是正确的。但是,如果您谈论的是 WordPress 自动生成的 link,那么答案就更简单了!您只需进入 WordPress 管理员并将站点 URL 更改为 http://my_app.com/blog/.
但是,有一个很大的警告。你正试图带上你的 "link juice"。如果 blog.my_app.com/some/post 没有重定向到 my_app.com/blog/some/post 那么你将不会保留你的 link 果汁。
要解决这个问题,您需要设置 htaccess 规则或找到一个自动创建从 blog.my_app.com/some/post 到 my_app.com/blog/some/post 的重定向的 WordPress 插件.此外,请确保 blog.my_app.com 在转换期间继续解析为您的博客站点。
实际上,这是 Wordpress 最让我烦恼的事情之一。它真的不是为移动而设计的。数据库中散布着一些设置和内部链接,这些设置和内部链接是绝对指定的,而不是相对于 Wordpress 基础指定的。当您想做每个专业网站都应该做的事情时,这会让您头疼不已:设置一个暂存实例,只有在一切设置正确后才将其移动到实时服务器。
幸运的是,有一个很好的工具可以解决这个问题:
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
它会在数据库范围内进行搜索和替换,自动解决 PHP 序列化值的问题,如果您尝试自己做的话。您可以将其限制为仅某些表,并且可以在执行之前预览它将进行的更改。每当您移动 Wordpress 安装时,请使用此工具搜索旧的 URL 并将其替换为新的。
我目前有一个 Rails 应用 my_app.com
和一个关联的 Wordpress 博客 blog.my_app.com
。它们都 运行 独立于 Heroku(即没有 Apache 或 Nginx 脚本)
我正在尝试将博客移动到 Rails 应用程序的子文件夹中,my_app.com/blog
不会丢失博客的任何现有 SEO 'juice'。
我已经实现了 rack-reverse-proxy gem 并且博客的主页尽职尽责地显示在 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', 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>
听起来您需要做的就是更新 WordPress 站点中的 URL 以使用新方案。最简单的方法是在数据库中执行搜索和替换:
Search: blog.my_app.com
Replace: my_app.com/blog
但是有一个警告。 WordPress 在数据库中存储了大量的序列化数据。序列化的字符串具有定义的长度,因此仅更改字符串而不更新长度会导致问题。
我喜欢使用 this utility 来更新 WordPress 中的链接。它将在数据库上执行搜索和替换,并将正确更新序列化数据。确保您有数据库备份以防出现问题。
如果您谈论的是您手动输入的 link,那么 mtinsley 的回答是正确的。但是,如果您谈论的是 WordPress 自动生成的 link,那么答案就更简单了!您只需进入 WordPress 管理员并将站点 URL 更改为 http://my_app.com/blog/.
但是,有一个很大的警告。你正试图带上你的 "link juice"。如果 blog.my_app.com/some/post 没有重定向到 my_app.com/blog/some/post 那么你将不会保留你的 link 果汁。
要解决这个问题,您需要设置 htaccess 规则或找到一个自动创建从 blog.my_app.com/some/post 到 my_app.com/blog/some/post 的重定向的 WordPress 插件.此外,请确保 blog.my_app.com 在转换期间继续解析为您的博客站点。
实际上,这是 Wordpress 最让我烦恼的事情之一。它真的不是为移动而设计的。数据库中散布着一些设置和内部链接,这些设置和内部链接是绝对指定的,而不是相对于 Wordpress 基础指定的。当您想做每个专业网站都应该做的事情时,这会让您头疼不已:设置一个暂存实例,只有在一切设置正确后才将其移动到实时服务器。
幸运的是,有一个很好的工具可以解决这个问题: https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
它会在数据库范围内进行搜索和替换,自动解决 PHP 序列化值的问题,如果您尝试自己做的话。您可以将其限制为仅某些表,并且可以在执行之前预览它将进行的更改。每当您移动 Wordpress 安装时,请使用此工具搜索旧的 URL 并将其替换为新的。