Php 如何将url重定向到动态ip地址,但将域名保留在地址栏中?动态DNS

Php 如何将url重定向到动态ip地址,但将域名保留在地址栏中?动态DNS,php,apache,forwarding,dyndns,Php,Apache,Forwarding,Dyndns,我正在尝试创建自己的动态DNS服务器。我想在家里远程访问我自己的云和在RaspberryPi上运行的apache Web服务器。我的ipv4不是公共的,但我有ipv6设置,可以公开访问 我有一个基于云的主机(rpi.myowndns.abc)——运行apache——我计划从中运行我的动态DNS服务。到目前为止,我: 在rpi.myowndns.abc上创建了一个myip.php页面,该页面将我当前的ipv6地址存储在Web主机上的一个文本文件(currentIP.text)中(我的rpi有一个b

我正在尝试创建自己的动态DNS服务器。我想在家里远程访问我自己的云和在RaspberryPi上运行的apache Web服务器。我的ipv4不是公共的,但我有ipv6设置,可以公开访问

我有一个基于云的主机(rpi.myowndns.abc)——运行apache——我计划从中运行我的动态DNS服务。到目前为止,我:

  • 在rpi.myowndns.abc上创建了一个myip.php页面,该页面将我当前的ipv6地址存储在Web主机上的一个文本文件(currentIP.text)中(我的rpi有一个bash脚本(ddns更新客户端),它每小时用我的eth0 ipv6地址联系myip.php)

  • 在rpi.myowndns.abc上创建了index.php页面,该页面将我重定向到最新更新的ipv6地址

  • index.php
    
    每当我访问rpi.myowndns.abc时,我都会按照预期重定向到我的家庭服务器ipv6。但是,URL看起来像https://[20a2:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]/

    例如,我希望我的url显示为rpi.myownddns.abc/owncloud,类似于您从ddns提供商处获得的内容(例如noip)。我如何做到这一点?

    我尝试了apache mod_rewrite,但只实现了与php相同的重定向。我登录了mod_别名,但这似乎需要域名,而不是ip地址


    感谢您的帮助或指点。谢谢。

    您是否真的在创建DNS服务,例如用C、Rust、Go等编写的内容,您是在使用现有的DNS服务,还是只是在创建一个重定向到IP地址的网页?从你的问题我看不出来。嗨,克里斯。没有任何东西是用C或任何其他语言写的。最多我想使用php或者apache重写。其思想是模拟动态dns提供程序(如无ip)发生的情况。例如,假设我将SimLun.ddns.net作为no-ip.com主机。当我把它输入浏览器时,我就进入了我的家庭服务器。但是,url将是simlun.ddns.net,而不是我的ip地址。这是怎么做到的?我只能用地址barOkay中的ip地址来管理重定向,这是有道理的。首先,很重要的一点是要理解,您没有以任何方式进行DNS。DNS是一个级别低得多的协议。此时您是100%HTTP,浏览器根本无法使用您用于DNS的内容。其次,浏览器能够将一个名称转换为IP,但是他们永远不会做相反的事情,因为实际上没有这样的注册(忽略PTR记录)。要让浏览器真正显示域名,你需要真正更新公共互联网上的DNS记录,你不能只是在HTTP中重定向。我会寻找一个免费的动态DNS服务谢谢克里斯。因此,我将不得不深入研究DNS,看看我如何才能使这项工作。我已经使用了免费的动态DNS服务。然而,这些都有其局限性。我的工作区会阻止它们,而我使用的工作区似乎没有自动更新ipv6的客户端。这是一个学习新东西的好机会:)我搜索了一下,发现了这个项目。我会调查一下的。你能推荐一些我可以了解更多DNS信息的来源吗?再次感谢。您在问题中提到,您连接到您的CAN网站,并被重定向到您的主页。你希望浏览器中的域名不会改变,对吗?然后在云网站上设置代理。当您的浏览器请求您的云域时,apache代理将充当客户端并与您的主站点通信。您的主页回复将被发送回您。因此,从您的浏览器的角度来看,只有您的云网站wsa联系。
    index.php
    
    <?php
    $myFile = "currentIP.txt";
    $fh = fopen($myFile, 'r');
    $theIP = fread($fh, filesize($myFile));
    fclose($fh);
    //echo $theIP;
    header('Location: https://['.$theIP.']');
    ?>