【问题标题】:Serve content from first domain's subdirectory on another domain using Apache使用 Apache 在另一个域上提供来自第一个域的子目录的内容
【发布时间】:2021-12-25 09:13:21
【问题描述】:

我有一个网站,比如domain1.example,部署在带有 apache2 的 Amazon EC2 机器上。 我想将domain2.example 指向domain1.example/path
基本上是这样的:
domain2.example -> domain1.example/path
domain2.example/one -> domain1.example/path/one
domain2.example/two/page -> domain1.example/path/two/page
(不改变浏览器地址栏中的URL)

我试过这些方法:

  1. /etc/apache2/sites-available/000-default.conf添加重写规则
...
<VirtualHost *:80>
        ServerName "domain2.example"
        ServerAdmin email@domain1.example
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        RewriteEngine On
        RewriteRule ^(.*)$ https://domain1.example/path/$1 [P]
        <Directory /var/www/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Require all granted
        </Directory>
</VirtualHost>
  1. 为项目文件夹中的.htaccess添加重写规则
RewriteCond %{HTTP_HOST} ^domain2\.example [NC]
RewriteRule ^(.*)$ https://domain1.example/path/$1 [P]

它们都不起作用。两个域都服务于根文件夹。我做错了吗?

【问题讨论】:

  • “它们都不起作用”实际上是什么意思?确切地?您是否收到了意想不到的内容?有没有指出错误?哪一个?当您提出测试请求时,宇宙是否崩溃了?
  • 这里的一个猜测可能是您收到了一个 http 状态 500。这可能是由于代理模块未加载到 http 服务器的问题引起的。在您的 http 服务器的错误日志文件中明确指出的问题。但正如所说:这只是一个猜测 ...
  • 重定向根据定义更改 URL。您正在寻找的不是重定向。您希望在两个不同域下的 URL 上提供相同的内容。我编辑了您的问题以删除“重定向”一词。
  • 好的,所以您的规则很可能根本不会被应用。我们无法告诉您原因,我们无权访问该信息。
  • 如果我理解你对@StephenOstermiller 给出的答案的评论,那么我想知道为什么你不能简单地使用内部重写规则而不是使用那些极其昂贵的代理规则......

标签: apache .htaccess amazon-ec2


【解决方案1】:

我将为具有不同文档根目录的两个域使用单独的虚拟主机来实现这一点。

<VirtualHost *:80>
    ServerName "domain1.example"
    DocumentRoot /var/www/html
    ...
</VirtualHost>
<VirtualHost *:80>
    ServerName "domain2.example"
    DocumentRoot /var/www/html/path
    ...
</VirtualHost>

虽然这将实现您的目标,但我不建议您设置这样的网站。

  • 如果两个站点都有.htaccess 文件,它们可能会相互冲突。在访问不同域上的内容时,您可能会看到不同的行为,因为这两种情况适用于哪些规则。
  • 搜索引擎更喜欢仅在一个“规范”URL 上查找内容。当您在多个域上提供相同的内容时,可能会混淆搜索引擎并损害您的 SEO。

【讨论】:

  • 但是该站点使用 PHP 进行路由,因此它实际上没有可用作文档根目录的子文件夹。 PS我确实有两个独立的虚拟主机。请注意我的问题中代码 sn-p 中的省略号。
  • 然后您需要修改将所有内容传递到 PHP 中的重写规则。我无法帮助您,因为您没有将它们包含在您的问题中。请编辑您的问题以提供更多信息(可能需要您的整个虚拟主机和 .htaccess 文件。)
猜你喜欢
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2014-09-11
相关资源
最近更新 更多