如何创建类似于Pastebin,Imgur,Youtube等的网址?

时间:2017-03-05 13:17:02

标签: php mysql wordpress .htaccess mod-rewrite

我正在创建一个网站(使用PHP和MySQL),它接受用户输入,生成随机链接,并在生成的链接上使用该用户输入来显示内容。

最近的现实生活示例是http://pastebin.com/ - 您在主页上输入文字输入,它会生成随机链接(例如http://pastebin.com/2hf4Dtv7,然后您输入的文字会永久显示在该页面上生成的链接。

我一直坚持这个问题似乎永远。我已经设法让问题的不同部分得到解决(我认为),但我似乎无法将其完全解决。

关键事实

  • 用户输入需要可在生成的链接上使用
  • 我将使用PHP文件 run.php 来显示内容/操纵用户的输入,因此需要在生成的链接上提供(除非有另一种方法)。
  • 我有一个MySQL数据库,当前有/存储3列: ID (整数,自动递增), userinput (varchar,设置为唯一)和 pageurl (varchar,也设置为唯一)
  • 网站正在使用WordPress,但这并不重要,因为我直接处理PHP / htaccess文件。

我尝试/设法做的事情:

  • 我可以通过<?php echo $randGen ?>为网址生成随机字符串。这可以放入<form action="<?php echo $randGen ?>" method="POST"> - 这样可以打开一个标签到 domain.com/xyz ,但404s&amp; run.php 未分配给生成的链接(我不确定输入值是否为)。
  • 在表单中尝试了POSTGET个方法。输入数据不敏感,因此不是一个大问题。
  • 阅读&amp;尝试使用.htaccess重写规则/漂亮网址,例如RewriteRule ^([0-9a-zA-Z]+)$ run.php?userinput=$1 [NC,L],以及尝试使用[QSA]&amp; &%{QUERY}保持用户输入,但发现自己远离我的深度。
  • 尝试将MySQL(自动递增)ID转换为base64,但不确定在哪里运行PHP脚本以使其正常运行&amp;也不明白如何将随机字符串附加到URL,同时仍显示用户输入。
  • 观看了大量关于如何创建pastebin-esque网站/ URL缩短网站的教程,看看我是否可以从中获得任何相关的想法 - 无济于事。

1 个答案:

答案 0 :(得分:0)

你快到了,RewriteRule是可行的方法。

在你的apache配置中使用它:

RewriteRule ^([0-9a-zA-Z]+)$ run.php?randurl=$1 [L]

这在你的html页面中:

<form action="/run.php" method="POST">
  Userinput: <input type="text" name="userinput">

然后你只需要在run.php中使用变量$_GET['randurl']$_POST['userinput']

if (isset($_POST['userinput'])) { // user adds a new input
  // insert into database (userinput, randurl) values ('".$_POST['userinput']."', '".$randGen."') 
  // redirect the user to the new short URL page:
  header('Location: domain.com/'.$randGen);
}
else if (isset($_GET['randurl'])) { // user wants to access the short URL
  // retrieve userinput from database:
  // select userinput from mydatabasename where randurl = 'domain.com/'.$_GET['randurl']
  $sql = "SELECT userinput FROM articles WHERE randurl = '".$_GET[randurl]."'";
  $result = $conn->query($sql);
  if ($result) {
    if ($row = $result->fetch_object()) {
      // echo select result in the page
      echo($row['userinput']);
    }
    else
      echo("error: fetch_object");
    $result->close();
  }
  else
    echo("error: query");
}