将 subdomain.domain.com 重写为 domain.com/subdomain 而不重定向

Rewrite subdomain.domain.com to domain.com/subdomain without redirect

我已经阅读了大量的 Whosebugs,但我似乎遗漏了一些东西。

我有一个 PHP 申请 运行 正在 https://subdomain.example.com/page/x but for SEO reasons I want people/bots to see https://example.com/subdomain/page/x

我可以使用以下方法重写 URL:

RewriteEngine on
RewriteCond %{HTTP_HOST} subdomain.example.com
RewriteRule ^(.*)$ https://example.com/subdomain/ [L,NC,QSA]

此重写结果为:https://example.com/subdomain/page/x,但我一直收到 404 错误,因为“主”域当然不知道路径 /subdomain/page/x

我想要的是 URL https://example.com/subdomain/page/x 但是 运行 它在后台 https://subdomain.example.com/ 因为这是 PHP应用程序是 运行ning.

这可能吗?我应该怎么做?

没有充分的 SEO 理由不使用子域。请参阅 Do subdomains help/hurt SEO? 我建议大多数时候使用子目录,但在需要时使用子域。

当您的内容托管在位于单独托管位置的单独服务器上时,子域是有保证的。虽然在技术上可以从单独的服务器的子目录中提供内容,但这会带来一系列 SEO 问题:

  1. 会很慢。
  2. 会引入重复内容

从技术角度来看,您需要在 example.com 网络服务器上使用反向代理从 subdomain.example.com 获取 /subdomain/ 子目录的内容。 example.com.htaccess 文件中的代码类似于:

RewriteEngine on
RewriteRule ^subdomain/(.*)$ https://subdomain.example.com/ [P]

[P] 标志表示“反向代理”,这将使服务器从远程子域获取内容。这必然会使用户的速度变慢。这么多,以至于SEO使用子域会更好。

为此,您还需要保留子域并 运行宁和服务内容供主服务器获取。这会导致重复的内容。您可以通过实施指向子目录的规范标签来解决此问题。

这需要几个可用的 Apache 模块。在我基于 Debian 的系统上,我需要 运行 sudo a2enmod ssl proxy rewrite proxy_connect proxy_httpsudo service apache2 reload。我还必须在我的 <VirtualHost> 指令中为我想使用它的网站添加 SSLProxyEngine on