我有一个提供商负责管理我的域名(提供商 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 虚拟主机配置似乎已正确设置,但问题可能出在
.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 Checker、WhatsmyDNS 和 DNSMap 等网站可用于查看您的 DNS 更改是否在全局可见。输入您的域名并选择要检查的记录类型(例如 A、AAAA、CNAME)。结果显示新记录在世界各地的不同 DNS 服务器上是否可见。
有时,您的本地计算机或网络可能会缓存旧的 DNS 记录。您可以清除本地 DNS 缓存:
ipconfig /flushdns
sudo killall -HUP mDNSResponder
nscd
守护进程。Google 的公共 DNS 刷新缓存工具等工具可以帮助加快删除公共解析器上缓存的 DNS 记录。