【问题标题】:How can I use a subdirectory instead of a subdomain?如何使用子目录而不是子域?
【发布时间】:2011-09-04 23:35:38
【问题描述】:

我正在构建一个 Rails 应用程序,我将在 domain.com 上的 Heroku 上托管它。我想将 WordPress 用于托管在 phpfog 上的博客,但我不想使用像 blog.domain.com 这样的子域。我更喜欢使用 domain.com/blog 之类的子目录

这与 SEO 无关……我只是不喜欢子域。子目录更性感(是的……我实际上是这么说的)。

知道如何可靠地完成此任务吗?提前感谢您的帮助。

【问题讨论】:

  • 我不知道这是否可能,因为您无法在 Heroku 下托管 Wordpress。
  • 根据下面的答案,以及我所做的一些研究,我认为将我自己的小 Rails 博客引擎加入我的应用程序可能会更好。我看过“在 15 分钟内建立一个博客”的 rails 视频。我不想使用脚手架(我可能没有任何脚手架)。无论如何,我的应用程序有点博客风格......帖子,cmets等。我必须设置某种用户权限,以便只有拥有管理员帐户的人才能在博客上发帖。
  • 我不能为这个项目推荐 Ryan 的 railscasts,他在博客中有很多例子,所以有很多资源可以帮助你。 railscasts.com
  • 谢谢布鲁诺...我会去看看。目前正在阅读 Michael Hartl 的 Ruby on Rails 3 教程。
  • 仅供参考,有一个 Rails 博客,它的功能大约是 Wordpress 的四分之一,名为 Refinery CMS ruby-toolbox.com/projects/refinerycms。它不是 WordPress,而是原生解决方案。

标签: ruby-on-rails wordpress heroku subdomain subdirectory


【解决方案1】:

您可以使用 neezer 发现的 rack-reverse-proxy gem 来执行此操作。首先,您需要将gem "rack-reverse-proxy", :require => "rack/reverse_proxy" 添加到您的Gemfile 并运行bundle install。接下来,您将修改您的 config.ru 以将 /blog/ 路由转发到您想要的博客:

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

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

run YourAppName::Application

您可能已经有了第一个 require 语句和 run YourAppName... 语句。有几个重要的细节使这项工作。

首先,当您添加所需的博客 URL 时,不能在其上保留尾部斜杠。如果这样做,当有人请求 http://yourdomain.com/blog/ 时,gem 会将它们转发到 http://you.yourbloghost.com//,并带有一个额外的斜杠。

其次,如果:preserve_host 选项未启用,您的博客托管服务器会将请求视为针对http://yourdomain.com/blog/ 而不是http://you.yourbloghost.com,并将返回错误结果。

如果博客使用/absolute/paths/to/images/,您仍然可能会遇到 CSS 或图片问题。

【讨论】:

  • 您如何处理 tumblr 使用绝对 URL 链接到包含主机名的内容这一事实?
  • 克里斯,恐怕我对此没有很好的解决方案。我使用的是 Wordpress,您可以在其中手动指定它将在页面内容中使用的基本路径,所以我不需要解决这个问题。如果你想涉足自定义 rack-reverse-proxy 的源代码,你可以修改它,以便它编辑 Tumblr 返回的 HTML ..
  • 是的,我一直在尝试弄清楚如何做到这一点。我正在考虑进行一些正则表达式替换,但从文档中不清楚具体是如何完成的。
  • 如果你想捕获 /blog(不带斜杠) reverse_proxy /^\/blog(\/?.*)$/, 'notch.tumblr.com$1', opts={:preserve_host = > 真的}
  • 这很好用 - 你如何更改 wordpress 设置以使 CSS 仍然有效?
【解决方案2】:

除了 jplewickeless 的回答之外,我最终编写了自定义 Rack middelware 来替换反向代理端的绝对 url 和其他路径。本指南将帮助您开始:

http://railscasts.com/episodes/151-rack-middleware

【讨论】:

    【解决方案3】:

    据我所知,如果可以使用重写规则,您将无法使用 heroku 访问 Apache 配置文件。

    如果您选择不使用 heroku,您可以随时执行我在下面详述的操作。但是,如果您不使用 heroku,您可以轻松地将 wordpress 提取到 /public/ rails 文件夹,然后再次使用重写规则来让 apache 处理博客请求。

    您需要在 apache 配置中添加。

    RewriteRule ^/blog/?(.*)$ http://somedomain.com/~user/blog/$1 [P,NC,QSA,L]
    

    它将所有到 /blog/ 的请求重定向到另一台服务器。

    来源:http://www.igvita.com/2007/07/04/integrating-wordpress-and-rails/

    【讨论】:

    • 我不认为重写是他想要的,因为这会将 URL 栏中的地址更改为 another-domain.com/blog 而不是 original-domain.com/blog
    • 啊,我明白了。我不熟悉 mod_rewrite 的工作原理。我只是做了一些谷歌搜索,并认为这会满足他的要求。
    【解决方案4】:

    我想说你最好的选择是尝试使用 Rack 中间件(类似于 Apache 的 mod_proxy)做一个反向代理。

    快速的 Google 搜索发现了这个 gem (https://github.com/jaswope/rack-reverse-proxy),但作者提到它可能还没有准备好生产。拥有 Rack 中间件代理应该允许您将子域 yourdomain.com/blog 转发到另一个网站 your-phpfog-account.com/wordpress-installation

    【讨论】:

      猜你喜欢
      • 2018-01-29
      • 2014-10-30
      • 2013-09-12
      • 2019-04-29
      • 2021-05-10
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多