我已经成功地编写了URL重定向/重写,但是,整个事情似乎是一种松散和不可靠的,它看起来像服务器实际上甚至没有'改写'。mod_rewrite问题:'隐藏'真实网址,太宽松htaccess定义
我的目标是改写格式为 http://www.mydomain.com/venues/Venue_Name至 http://www.mydomain.com/venueview.php?id=###的所有网址。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^venues/(.*)$ venueview.php?url=$1 [QSA,L]
</IfModule>
这部分工作,但是“(。*)$”部分似乎太松了,因为它只允许使用一切。它应该仅限于字母,数字和“ - ”,“_”。 此外,重写(?)后,浏览器中的地址栏会显示venueview.php网址,我认为这不是整个网站的主意,当然我也希望我的网址可以被搜索引擎索引'nice'格式,而不是数字参数。
在venueview.php的部分看起来像这样:
if (isset($_GET['url']) && !empty($_GET['url'])) {
$url = strip_tags($_GET['url']);
$mysqli = mysqli_connect('localhost', $dbuser, $dbpasswd, $dbname);
if ($mysqli->connect_error) {
die('Connect Error ('.$mysqli->connect_errno.') '.$mysqli->connect_error);
}
$sqlstr = "SELECT id, url FROM venues WHERE url = '".$url."' LIMIT 1";
if ($results = $mysqli->query($sqlstr)){
if ($results->num_rows == 1){
$row = $results->fetch_assoc();
$id = $row['id'];
}else{
$id = -1;
}
}
$mysqli->close();
if ($id != -1)
header("Location: /venueview.phtml?vid=".$id);
}
我会在我的代码修改,使其工作打算是什么?我卡住了..