我有一款旧版软件,不会更新,也无法修改,它会调用特定 URL 获取信息。但是,该 URL 随后发生了变化,不再返回有效结果。以下是示例: http://subdomain1.domain.com/sub1/sub2/sub3/[NUMBER]
其目前的结构是: http://subdomain2.domain.com/sub4/[NUMBER]
据我了解,HOSTS 仅基于 IP。有没有办法让我强制调用第一个示例的任何内容返回第二个示例?
谢谢
答案1
正如您所说,hosts
您只能控制 IP,但由于新 URL 是另一个子域,我们可以结合使用hosts
本地 Web 服务器来重写 URL。请注意,此解决方法要求应用程序使用浏览器或其他遵循 URL 重定向的组件。
我将使用 Apache 的原始安装,因为我们不需要 PHP 或 DB,但是如果你愿意,你可以使用像微软XAMPP。步骤如下:
下载来自 Apachehaus 的 Apache ZIP,我使用的是VC11 32位版本。注意,此版本需要Visual C++ 2012 可再发行版本,下载并安装它,如果您还没有安装它(如果您使用其他版本,您将需要匹配版本的 C++ Redistributable)。
将 ZIP 中的内容解压到一个文件夹中,我将使用它,
C:\Apache
但您也可以使用另一个文件夹,只需在接下来的步骤中使用该文件夹即可。转到
C:\Apache\Apache24\conf
并httpd.conf
使用文本编辑器打开并进行以下更改:- 搜索
Define SRVROOT "/Apache24"
并将其替换为Define SRVROOT "C:\Apache\Apache24"
,这会告诉 Apache 它的安装位置。 - 搜索
#LoadModule rewrite_module modules/mod_rewrite.so
并删除首字母#
,这将加载 URL 重写模块。 - 搜索
DocumentRoot "${SRVROOT}/htdocs"
,几行之后你会看到AllowOverride None
,将其替换为AllowOverride All
,这允许URL重写。
- 搜索
您可以手动启动 Apache,转到
C:\Apache\Apache24\bin
并执行httpd.exe
,但将其安装为服务更方便。为此,请打开cmd.exe
,转到该文件夹,然后执行httpd.exe -k install
。安装服务后,您可以从控制面板的服务管理工具启动/停止它(您需要在安装后第一次从那里启动它,然后它将随 Windows 自动启动)。测试服务器是否正在运行,打开
http://localhost
,如果运行正常,它会显示一个欢迎页面。如果服务器没有从命令行手动启动,它会打印阻止其启动的错误(例如,如果您在 ServerRoot 中输入了错误的路径)。在文本编辑器中创建一个新文件并将其另存为
.htaccess
(注意前导点)在文件夹中C:\Apache\Apache24\htdocs
,您必须将以下内容放入该文件中(将域和子文件夹更改为真实的域和子文件夹):RewriteEngine on RewriteRule ^sub1/sub2/sub3/(.*)$ http://subdomain2.domain.com/sub4/$1 [R]
最后,编辑 Windows
hosts
文件并添加以下行:127.0.0.1 subdomain1.domain.com
您可以从浏览器测试重定向是否有效,如果一切正常,现在当您输入http://subdomain1.domain.com/sub1/sub2/sub3/[任何内容]浏览器将被重定向到http://subdomain2.domain.com/sub4/[任何内容]。
如果要在多台计算机上使用此解决方法,则无需在每台计算机上安装 Apache,假设安装192.168.0.10
Apache 的机器的 IP 只需在hosts
每台机器的文件中添加即可:
192.168.0.10 subdomain1.domain.com
请注意,您需要允许防火墙与 Apache 的连接,至少要允许本地网络的连接。
答案2
据我了解,HOSTS 仅基于 IP。有没有办法让我强制调用第一个示例的任何内容返回第二个示例?
简单的解决方案是设置一个 Web 服务器或其他代理,以透明的方式将旧设置的 URL 请求重写为新设置。这可以通过 Apache 和 mod_rewrite 来实现(@alberto-martinez 的回答中有详细说明)。
我不是唯一一个使用此工具的人,如果可能的话,我希望将解决方案部署到团队中其他成员,不幸的是,他们的技术水平不如我。理想情况下,我们希望有一个一劳永逸的解决方案[。]
由于您也表示希望避免使用 hosts 文件(尽管可能出于更多技术原因),您可能需要考虑结合 Apache 使用 DNS 解决方案。
基本上,这将是一个额外的本地重定向(通过 DNS)subdomain1.domain.com到装有 Apache(或其他)的服务器。只要使用该软件的人连接到该 DNS 服务器,就无需修改每台计算机的 hosts 文件。
注意事项
你需要具体说明如何使用subdomain1.domain.com。如果你只是输入域名.com,这将导致问题(因为 subdomain2.domain.com也会被抓住)。
如果你确实使用了此解决方案,你可能必须调整重写规则(我遇到了问题,但根据 Alberto 的善意评论,这似乎是基于测试方法/用户错误)。
克隆公共顶级域名(例如.com),并且可能具有更多活动域,因此您可能需要在部署类似的解决方案之前进行一些研究。