基于查询字符串重定向

时间:2014-06-09 08:35:31

标签: html redirect query-string

我在家庭服务器上托管一些东西,但我的IP地址经常变化。我没有域名,所以我不能只给人们一些书签。为了解决这个问题,我制作了一个小的Perl脚本,将一个HTML文件吐出到DropBox中,所以我可以让人们为它添加书签。我知道,这不是最好的解决方案,但到目前为止它似乎正在发挥作用。

问题是,我想让它变得更好。我想要做的是有一个可选的查询字符串,比如?path = wiki或者什么东西,当它实际加载时,它会自动将你重定向到http://(my_ip)/wiki

不幸的是,我甚至不知道如何进行重定向,并且没有看到有人得到这个答案。特别是一个可选的,动态的,如果我理解它应该很简单。

2 个答案:

答案 0 :(得分:0)

纯粹用HTML格式我不会发现它

但你可以用javascript做,如果你无论如何吐出一个自定义的html页面,你可以在下面的例子中替换targetUrl的ipadres

<!DOCTYPE html>
<html>
<head>
  <title>Test redirect</title>
  <script type="text/javascript">
  var targetUrl = 'http://127.0.0.1';

  function querystring(paramName) {
    var url = document.location.href, params, param, i, reply = {}, name, value;
    if (url.indexOf('?') < 0) {
      return null;
    }
    params = url.split('?')[1].split('&');
    for (i = 0; i < params.length; i++) {
      param = params[i].split('=');
      name = (param[0] || '').toLowerCase();
      value = param[1] || '';
      if (typeof paramName === 'undefined' || paramName.toLowerCase() === name) {
        if (typeof reply[name] !== 'undefined') {
          if (typeof reply[name] === 'string') {
            reply[name] = [ reply[name], value ];
          } else {
            reply[name].push(value);
          }
          continue;
        }
        reply[name] = value;
      }
    }
    return reply;
  }

  function redirect() {
   var path = querystring('path');
   if (path === null || typeof path.path === 'undefined' || typeof path.path !== 'string')     {
    document.location.href = targetUrl;
   } else {
    document.location.href = targetUrl + '/' + path.path;
   }
  }
  </script>
</head>
<body onload="javascript:redirect()">
<h1>Redirecting to homesite</h1>
<p>You are being redirected, please wait while the page is loading!</p>
</body>
</html>

在这种情况下,如果有一个querystring参数?path = wiki,它会将它重定向到你的targetUrl并将路径/ wiki添加到它

更新

更新使用hyenahome.html#path:wiki而不是hyenahome.html?path = wiki

<!DOCTYPE html>
<html>
<head>
  <title>Test redirect</title>
  <script type="text/javascript">
  var targetUrl = 'http://127.0.0.1';

  function querystring(paramName) {
    var url = document.location.href, params, param, i, reply = {}, name, value;
    if (url.indexOf('#') < 0) {
      return null;
    }
    params = url.split('#')[1].split('&');
    for (i = 0; i < params.length; i++) {
      param = params[i].split(':');
      name = (param[0] || '').toLowerCase();
      value = param[1] || '';
      if (typeof paramName === 'undefined' || paramName.toLowerCase() === name) {
        if (typeof reply[name] !== 'undefined') {
          if (typeof reply[name] === 'string') {
            reply[name] = [ reply[name], value ];
          } else {
            reply[name].push(value);
          }
          continue;
        }
        reply[name] = value;
      }
    }
    return reply;
  }

  function redirect() {
   var path = querystring('path');
   if (path === null || typeof path.path === 'undefined' || typeof path.path !== 'string')     {
    return;
   } else {
    document.location.href = targetUrl + '/' + path.path;
   }
  }
  </script>
</head>
<body onload="javascript:redirect()">
<h1>Redirecting to homesite</h1>
<p>You are being redirected, please wait while the page is loading!</p>
</body>
</html>

答案 1 :(得分:0)

我知道这个建议是关于原来的问题&#34;我喜欢你想要做的事情,但是......你有没有考虑过动态DNS服务来为易失性IP地址设置一个不变的域名?多年来,我在同样的情况下(免费)使用了一些,效果很好。

会解决你的前提问题:

  

&#34; ...我在家庭服务器上托管了一些东西,但我的IP地址经常变化。我没有域名,所以我不能给人们一些书签......&#34;