我可以在不使用 HOSTS 文件的情况下进行复杂的 URL 和子文件夹重定向吗?

我可以在不使用 HOSTS 文件的情况下进行复杂的 URL 和子文件夹重定向吗?

我有一款旧版软件,不会更新,也无法修改,它会调用特定 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\confhttpd.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]
    
  • 最后,编辑 Windowshosts文件并添加以下行:

    127.0.0.1   subdomain1.domain.com
    

您可以从浏览器测试重定向是否有效,如果一切正常,现在当您输入http://subdomain1.domain.com/sub1/sub2/sub3/[任何内容]浏览器将被重定向到http://subdomain2.domain.com/sub4/[任何内容]

如果要在多台计算机上使用此解决方法,则无需在每台计算机上安装 Apache,假设安装192.168.0.10Apache 的机器的 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),并且可能具有更多活动域,因此您可能需要在部署类似的解决方案之前进行一些研究。

相关内容