2015-04-03 116 views
4

我目前有一個Rails應用程序my_app.com和一個關聯的Wordpress博客blog.my_app.com。他們都在Heroku上獨立運行(即沒有Apache或Nginx腳本)將Wordpress博客路由到Rails子文件夾 - 博客鏈接未更改

我想將博客移動到Rails應用程序的子文件夾my_app.com/blog而不會丟失任何博客現有的搜索引擎優化「果汁」。

我已經實現了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$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> 

回答

2

這聽起來像你所需要做的就是更新WordPress站點中的URL以使用新的方案。最簡單的方法是在數據庫中執行搜索和替換:

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

但是有一點需要注意。 WordPress在數據庫中存儲了大量的序列化數據。序列化的字符串具有定義的長度,因此只更改字符串而不更新長度會導致問題。

我喜歡使用this utility來更新WordPress中的鏈接。它將在數據庫上執行搜索和替換,並會正確更新序列化數據。確保你有數據庫的備份,以防出現問題。

0

如果你正在談論你手動輸入的鏈接,那麼mtinsley的回答是正確的。但是,如果您正在討論由WordPress自動生成的鏈接,那麼答案就更簡單了!您只需進入WordPress管理員並將網站網址更改爲http://my_app.com/blog/

然而,有一個很大的警告與此。你正在嘗試帶來你的「鏈接果汁」。如果blog.my_app.com/some/post沒有重定向到my_app.com/blog/some/post,那麼您將不會保留鏈接果汁。

要解決這個問題,您需要設置htaccess規則或找到一個WordPress插件,它可以自動創建從blog.my_app.com/some/post到my_app.com/blog/some/post的重定向。另外,請確保blog.my_app.com在轉換過程中繼續解析您的博客網站。

0

實際上,這是令我最煩惱於Wordpress的事情之一。它的設計並不適合移動。有些設置和內部鏈接分散在整個數據庫中,絕對地指定而不是相對於Wordpress基礎。當你想要做每個專業網站應該做的事情時,這使得它成爲一個痛苦的事情:建立一個臨時實例,並且只有當你把所有的東西都設置正確的時候,才把它移到實時服務器上。

幸運的是,解決這個問題的一個很好的工具: https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

它確實整個數據庫的搜索和替換,可以自動解決了與PHP序列化值的問題,如果你嘗試做你自己該出現。您可以將其限制爲僅限某些表,並且可以在執行它們之前預覽其所做的更改。無論何時移動Wordpress安裝,都可以使用此工具搜索舊URL並將其替換爲新的URL。