如何将子域重定向到主域中用作反向代理的子目录?

How do I redirect a subdomain to a subdirectory in primary domain serving as reverse-proxy?

提问人:Aayush Kothari 提问时间:9/15/2023 更新时间:9/25/2023 访问量:96

问:

我将首先描述当前的设置,然后描述我想将其更改为什么。

当前设置

以上所有工作都按预期进行。

我们想要什么

现在,营销团队想要提升 SEO 游戏,希望 blog.example.com/* 重定向到 www.example.com/blog/*

到目前为止我尝试过什么(当然失败了)

  • 在飞轮仪表板上设置重定向以 www.example.com/blog/$1(预期会导致无限重定向)。
  • 从 DNSSimple 中删除了 blog.example.com 的 A 记录(指向飞轮 IP 地址),并替换为指向 www.example.com 的 CNAME(不起作用)。

有了上面给出的堆栈,如何才能达到预期的结果?您建议如何更改堆栈以实现结果?

提前非常感谢,因为我花了好几天时间试图完成这项工作。

Ruby-on-Rails wordpress heroku dns 反向代理

评论

0赞 Mtxz 9/20/2023
在您的实际设置中,是否可以从 Internet 访问 WordPress blog.example.com?那么,如果 WordPress 可以从互联网上访问,它是否提供与 example.com/blog 相同的内容?在您的下一个设置中:WordPress 将是安装在子域上的经典 Wordpress。你不能只处理 example.com/blog blog.ex.com 从 Rails 重定向吗?

答:

-3赞 Mozadded Ali 9/16/2023 #1

若要将子域重定向到用作反向代理的主域中的子目录,可以使用以下步骤:

1.配置您的 DNS 记录。您需要为子域创建指向主域 IP 地址的 CNAME 记录。配置反向代理。您需要配置反向代理,以将对子域的请求转发到主域中的子目录。例如,如果您的子域已 blog.example.com,并且您希望将其重定向到主域的 /blog 子目录,则可以将反向代理配置为将请求转发给 blog.example.com example.com/blog。

2.在主域名中配置重定向。您需要在主域中配置重定向,以将所有对子域的请求重定向到子目录。例如,如果您的主域是 example.com,并且您希望将所有对 blog.example.com 的请求重定向到 /blog 子目录,则可以在 example.com 中配置重定向以将所有请求重定向到 /blog。

配置 DNS 记录、反向代理和重定向后,对子域的所有请求都将重定向到主域中的子目录。

评论

0赞 Chris 9/19/2023
您是否知道我们的政策禁止 AI 生成的答案
1赞 Siim Liiser 9/20/2023 #2

假设你真的想要重定向,这实际上非常简单,可以在 Rails 路由中处理。

get '/:blog_page', to: redirect('/blog/%{blog_page}'), constraints: { subdomain: 'blog' }

进入博客子域的每个 get 请求都与此路由匹配,并将被重定向到相应的路径。/blog

查看 Rails 路由文档了解更多详情。

评论

0赞 Aayush Kothari 10/3/2023
非常感谢你,Siim。让我试试这个,并给出适当的回应;)
0赞 Milind 9/22/2023 #3

由于它更多地来自 SEO POV,而不是来自 Rails 实现 POV,因此您可以尝试的选项很少 -

  1. 由于博客应用程序托管在其他服务器上,您唯一能做的就是使用指向该外部页面的 SEO 友好链接进行重定向。看看这里,了解使锚标签SEO友好的最佳方法
  2. 反向链接 - 如果你想要更多的控制权,我宁愿建议你使你的页面对 Rails(谁有链接到你的博客页面)和反向链接(从你的博客指向 rails 应用程序)都更加 SEO 友好。你可以在这里阅读更多关于反向链接的信息

希望它有所帮助。

0赞 olhor 9/25/2023 #4

这些是我必须完成的步骤,以实现类似的场景。也许其中一些会有所帮助。

我不确定重定向步骤,因此我只会提供一个幼稚的场景,可以通过两种方式完成:

  1. 在 DNS 区域中创建从 to 或blog.example.comexample.com/blog
  2. 像这样使用重定向元标记在目录中创建简单文件index.htmlblog.exmaple.com
...
<meta http-equiv="refresh" content="0; url=https://www.example.com/blog">
...

为了我的需要,我还有一个反向代理,但它是在nginx Web服务器下配置的,如下所示:

server {
  listen 443
  location /blog {
    root /blog/public;

    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $http_host;
    proxy_redirect off;
  }
}

Rails 应用程序由端口 8080 上的独立 Passenger 应用服务器提供服务。

接下来,重新配置 Rails 应用程序(在 6.1 版本下测试)以从子目录提供:

  1. 创建环境变量RAILS_RELATIVE_URL_ROOT=/blog
  2. 更新文件,可以使用以前设置的变量或只是硬编码它config.ru
require_relative "config/environment"

map ENV["RAILS_RELATIVE_URL_ROOT"] || "/" do
  run Rails.application
  Rails.application.load_server
end
  1. 通过添加以下条目来更新文件config/application.rb
...
config.relative_url_root = ENV["RAILS_RELATIVE_URL_ROOT"] if ENV["RAILS_RELATIVE_URL_ROOT"]
...

注意:对于上述方法,请确保从 Rails 控制台的角度看到变量。ENV["RAILS_RELATIVE_URL_ROOT"]

正如我所说,这不是一个具有明显答案的 1 对 1 情况,但它有一些相似之处(从子目录提供 Rails 应用程序),所以我认为它可能被证明是有用的。