我已经成功编码了URL重定向/重写,然而,整个事情看起来有点松散且不可靠,看起来服务器实际上甚至没有“重写”。
我的目标是重写格式的所有网址 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网址,我认为这不是整件事的想法,当然我也希望我的网址被搜索引擎索引在''很好的'格式而不是数字参数。
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);
}
我需要在代码中更改哪些内容才能使其按预期工作?我被卡住了..
答案 0 :(得分:1)
重写不是重定向。重定向是为了更改传入的请求,使其看起来像是对页面发出请求的页面。
.*
表示任意次数(.
)匹配任何内容(*
)
您需要更改模式以匹配您的slug格式。如果您愿意,请说明只允许使用字母,请使用[a-zA-Z]
。
有关您的网页应该查看Regex syntax。
的哪种模式的详细信息