Php 如何使用短URL将用户重定向到自定义表单?
我有一个项目,用户可以导航到提供的短URL,它可以将每个人重定向到具有不同业务名称的类似表单 目前我有一个MySQL数据库,如下所示:Php 如何使用短URL将用户重定向到自定义表单?,php,mysql,redirect,url-rewriting,short-url,Php,Mysql,Redirect,Url Rewriting,Short Url,我有一个项目,用户可以导航到提供的短URL,它可以将每个人重定向到具有不同业务名称的类似表单 目前我有一个MySQL数据库,如下所示: tbl_Codes - shortURL (string of 5 alphanumeric characters) - businessID (ID of business which matches the ID in the table below) tbl_Business - businessID - businessName - other fie
tbl_Codes
- shortURL (string of 5 alphanumeric characters)
- businessID (ID of business which matches the ID in the table below)
tbl_Business
- businessID
- businessName
- other fields....
因此,导航到example.com/12345的人会看到一个与businessID匹配的企业名称的表单,而导航到example.com/abcde的人会看到一个相同的表单,但名称不同的企业
这是最好的方法吗?如果没有,怎么做
链接脚本使用PHP regex获取短URL,匹配数据库中的字符串,然后执行301重定向。如果不匹配,它将重定向到404页面(尽管我可能不会执行404位)
提前谢谢
这是代码,以防你不想点击链接。它来自一个教程:
<?php
$expectedURL = trim($_SERVER['URL']);
$split = preg_split("{:80\/}",$expectedURL);
$shortURL = $split[1];
// security: strip all but alphanumerics & dashes
$shortURL = preg_replace("/[^a-z0-9-]+/i", "", $shortURL);
// Check this string to see if it matches a short URL in our database.
$isShortURL = false;
$result = getLongURL($shortURL);
if ($result) { $isShortURL = true; }
$longURL = $result['longURL'];
// Finally, we check to see if our $isShortURL flag is set.
// If a matching short URL was found, we’ll redirect to it.
// If not, we’ll display our standard 404.
if ($isShortURL)
{
redirectTo($longURL, $shortURL);
} else {
show404(); // no shortURL found, display standard 404 page
}
//The primary function:
// Get the long URL associated with the passed short URL, if it exists.
function getLongURL($s)
{
// define these variables for your system
$host = ""; $user = ""; $pass = ""; $db = "";
$mysqli = new mysqli($host, $user, $pass, $db);
// you may just want to fall thru to 404 here if connection error
if (mysqli_connect_errno()) { die("Unable to connect !"); }
$query = "SELECT * FROM urls WHERE shorturl = '$s';";
if ($result = $mysqli->query($query)) {
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
return($row);
}
} else {
return false;
}
} else {
return false;
}
$mysqli->close();
}
//Perform the URL redirection.
function redirectTo($longURL)
{
// change this to your domain
header("Referer: http://www.your-domain-here.com");
// use a 301 redirect to your destination
header("Location: $longURL", TRUE, 301);
exit;
}
//Finally, display your standard 404 page here.
function show404()
{
// display/include your standard 404 page here
echo "404 Page Not Found.";
exit;
}
?>
您发布的链接是。。。。好吧伊什。不过,有更好的方法可以做到这一点。然而,在你的情况下,我不认为这是你需要的
如果不深入查看代码,就不要使用正则表达式。使用htaccess文件并进行mod_重写,以将“shorturl”作为查询参数传入。使用$\u GET super-global通过PHP脚本访问。看起来你根本不需要重定向?只需使用业务id取出必要的数据
此外,在继续之前,如果可能的话,开始使用PDO,并为其构建一个DB类(包装器)。从长远来看,更多面向对象的方法将更好地为您服务。您发布的链接是。。。。好吧伊什。不过,有更好的方法可以做到这一点。然而,在你的情况下,我不认为这是你需要的
如果不深入查看代码,就不要使用正则表达式。使用htaccess文件并进行mod_重写,以将“shorturl”作为查询参数传入。使用$\u GET super-global通过PHP脚本访问。看起来你根本不需要重定向?只需使用业务id取出必要的数据
此外,在继续之前,如果可能的话,开始使用PDO,并为其构建一个DB类(包装器)。从长远来看,更多面向对象的方法将更好地为您服务。也许我经常发布这条消息:行
$query = "SELECT * FROM urls WHERE shorturl = '$s';";
看起来是我的最佳人选
(也被称为)也许我发布这条消息太频繁了:那条线
$query = "SELECT * FROM urls WHERE shorturl = '$s';";
看起来是我的最佳人选
(也称为)当您在外部单击url链接时,拥有一个form.php页面并在顶部设置一个GET var不是更容易吗?例如,从page index.php>form.php?busName=someBussiness,在该页面上使用$_GET[“busName”];?我不这么认为。用户不是来自该站点,因此应该使用短URL直接重定向到预填充的表单。当您从外部单击URL链接时,是否更容易拥有form.php页面并在顶部设置GET var?例如,从page index.php>form.php?busName=someBussiness,在该页面上使用$_GET[“busName”];?我不这么认为。用户不是来自该网站,因此应该使用简短的URL直接重定向到预先填写的表单。感谢您的意图,但代码示例来自教程。我不认为它会被逐字逐句地用在生产站点上。@Joe,相信我,这是很多次了。感谢您的意图,但代码示例来自教程。我不认为它会被逐字逐句地用在生产网站上。@Joe,相信我,这是很多次了。谢谢你的输入。我不是一个很好的后端开发人员,所以我边做边学。我只是对gzip文件和删除“www”中的.htaccess略知一二。你有没有这样的例子?遗憾的是,PDO和DB类目前比我的水平高了一点。没问题,这应该是有帮助的:仔细阅读,这确实是一个很好的选择。我还不知道,但这肯定是一个很好的回答。我很清楚,你的建议是这样的吗?mod_rewrite采用“短url”并将其写为example.com/form.php?businessID=12345
——在这一点上,我使用$\u get用12345
查找数据库?是的!确切地最棒的是mod_rewrite不仅仅做重定向,你的url看起来仍然“漂亮”,而且businessID作为查询字符串传递到form.php脚本的事实将是透明的。谢谢你的输入。我不是一个很好的后端开发人员,所以我边做边学。我只是对gzip文件和删除“www”中的.htaccess略知一二。你有没有这样的例子?遗憾的是,PDO和DB类目前比我的水平高了一点。没问题,这应该是有帮助的:仔细阅读,这确实是一个很好的选择。我还不知道,但这肯定是一个很好的回答。我很清楚,你的建议是这样的吗?mod_rewrite采用“短url”并将其写为example.com/form.php?businessID=12345
——在这一点上,我使用$\u get用12345
查找数据库?是的!确切地最棒的是mod_rewrite不仅仅做重定向,您的url看起来仍然“漂亮”,而且businessID作为查询字符串传递到form.php脚本的事实将是透明的。