2012-03-18 85 views
0

我已經成功地編寫了URL重定向/重寫,但是,整個事情似乎是一種鬆散和不可靠的,它看起來像服務器實際上甚至沒有'改寫'。mod_rewrite問題:'隱藏'真實網址,太寬鬆htaccess定義

我的目標是改寫格式爲 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網址,我認爲這不是整個網站的主意,當然我也希望我的網址可以被搜索引擎索引'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); 
} 

我會在我的代碼修改,使其工作打算是什麼?我卡住了..

回答

1

重寫不重定向。重定向是改變傳入的請求,使其看起來像是向頁面發出請求的頁面。

.*意味着匹配任何(.)任意次數(*

您需要更改要匹配的模式,以滿足您的蛞蝓是什麼格式。如果你想要的話,只說可以使用的字母,請使用[a-zA-Z]

關於什麼樣的圖案你的網頁應該看看Regex syntax的更多細節。