将子域名从域名托管商重定向到具有其他提供商路径的网络空间

问题描述 投票:0回答:1

我有一个提供商负责管理我的域名(提供商 A),另一家提供商托管我的专用服务器(提供商 B)。

我想在提供商 (A) 处使用子域 me.comp.com,该子域应路由到提供商 (B) 处 htdocs 文件夹下方路径中的网络空间,例如 /htdocs/app2。

最后我想在浏览器的 URL 区域中看到 me.comp.com/index.php,而 Index.php 是应用程序的开头。

我能够使用域 DNS 中的 A 记录从提供商 A 路由到提供商 B,例如

我 60 在 xxx.xxx.xxx.xxx

我还检查了 XAMMP 安装中 apache httpd.conf 是否有此条目 包含已启用的conf/extra/httpd-vhosts.conf

所以我像这样调整了虚拟主机

NameVirtualHost *:80

<VirtualHost *:80>
   DocumentRoot "C:/xampp/htdocs"
   ServerName localhost
</VirtualHost>

<VirtualHost *:80>
   DocumentRoot "C:/xampp/htdocs/app2"
   ServerName me.comp.com
   ServerAlias me.comp.com
   ErrorLog "logs/me.comp.com-error.log"
   CustomLog "logs/me.comp.com-access.log" common
</VirtualHost> 

到目前为止,这有效;我可以输入子域 me.comp.com 并到达提供商 B 的主机。但是我在浏览器的 URL 窗口中看到的是 xxx.xxx.xxx.xxx/app2,而不是 me.comp.com/index.php .但是应用程序可以运行并且可用。

所以我尝试设置 .htaccess

RewriteEngine on
RewriteCond %{HTTP_HOST} ^xxx\.xxx\.xxx\.xxx
RewriteRule (.*) http://me.comp.com/$1 [R=301,L]

我现在部分成功了,因为 URL 发生了变化。我现在收到 me.comp.com/app2 而不是 me.comp.com/index.php。但没有IP了。但是,在这个版本中,我无法再访问内容,我只收到一个空白页面,而不是文件夹 /app2 中的 index.php,并且仍然显示我不想要的路径。

我想要什么

子域名服务器 me.comp.com -> me.comp.com/index.php(在 /htdocs 的子文件夹 /app2 内)

有人有提示吗?看来我搞砸了:)

apache url-rewriting subdomain
1个回答
1
投票

您的 Apache 虚拟主机配置似乎已正确设置,但问题可能出在

.htaccess
重写规则上,这些规则未按照您的需要正确重定向或隐藏路径。

由于您的虚拟主机已经将流量定向到正确的文件夹 (

/htdocs/app2
),您的
.htaccess
应该不再需要重定向流量,而是确保显示的 URL 不会泄露内部路径。

RewriteEngine On
# Make sure all requests to the IP address are redirected to the domain
RewriteCond %{HTTP_HOST} ^xxx\.xxx\.xxx\.xxx$
RewriteRule ^(.*)$ http://me.comp.com/$1 [R=301,L]

# Hide the /app2 path
RewriteCond %{REQUEST_URI} !^/app2/
RewriteRule ^(.*)$ /app2/$1 [L,NC]

这组规则首先确保任何直接 IP 地址访问都重定向到您的子域。
第二部分旨在内部重写请求以包含

/app2
路径,而不更改用户可见的 URL。也就是说,假设您的 Apache 设置允许覆盖
.htaccess

在 Windows 上使用

ipconfig /flushdns
或在 macOS 上使用
dscacheutil -flushcache
确保重新加载您的 DNS 设置。
并清除浏览器缓存以避免缓存的重定向干扰您的新设置。
更改配置或
.htaccess
文件后重新启动 Apache 以应用更改。如果仍然无法正常工作,请检查
ErrorLog
CustomLog
文件。


这一切的原因看似很简单。我太不耐烦了。我使用的名称服务器更新速度不是很快(1 天更改):现在一切正常。

确实,在更改域记录或 DNS 设置时,由于 DNS 传播而遇到延迟是很常见的。根据 DNS 记录的 TTL(生存时间)值和所涉及的 DNS 服务器,更改可能需要几分钟到最多 48 小时才能在互联网上完全传播。

在计划 DNS 更改时,检查 TTL 设置并做好等待时间的准备总是一个好主意,特别是对于重要的服务或实时网站。如果您经常需要更改 DNS,考虑设置较低的 TTL 可能有助于加快将来的传播速度,但这可能会增加 DNS 服务器的负载。

您可以使用命令行工具查看 DNS 记录的 TTL,例如 Linux/macOS 上的

dig
或 Windows 上的
nslookup

dig @nameserver domain.com

您还可以检查 DNS 更改是否已传播到世界各地。 DNS CheckerWhatsmyDNSDNSMap 等网站可用于查看您的 DNS 更改是否在全局可见。输入您的域名并选择要检查的记录类型(例如 A、AAAA、CNAME)。结果显示新记录在世界各地的不同 DNS 服务器上是否可见。

有时,您的本地计算机或网络可能会缓存旧的 DNS 记录。您可以清除本地 DNS 缓存:

  • 在 Windows 上:
    ipconfig /flushdns
  • 在 macOS 上:
    sudo killall -HUP mDNSResponder
  • 在 Linux 上:重新启动
    nscd
    守护进程。

Google 的公共 DNS 刷新缓存工具等工具可以帮助加快删除公共解析器上缓存的 DNS 记录。

© www.soinside.com 2019 - 2024. All rights reserved.