mod_rewrite问题:'隐藏'真实的URL,太松散的htaccess定义

时间:2012-03-18 05:28:12

标签: .htaccess mod-rewrite redirect

我已经成功编码了URL重定向/重写,然而,整个事情看起来有点松散且不可靠,看起来服务器实际上甚至没有“重写”。

我的目标是重写格式的所有网址 http://www.mydomain.com/venues/Venue_Namehttp://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);
}

我需要在代码中更改哪些内容才能使其按预期工作?我被卡住了..

1 个答案:

答案 0 :(得分:1)

重写不是重定向。重定向是为了更改传入的请求,使其看起来像是对页面发出请求的页面。

.*表示任意次数(.)匹配任何内容(*

您需要更改模式以匹配您的slug格式。如果您愿意,请说明只允许使用字母,请使用[a-zA-Z]

有关您的网页应该查看Regex syntax

的哪种模式的详细信息