Проблемы с mod_rewrite: «скрытие» реального URL, слишком свободные определения htaccess - PullRequest
0 голосов
/ 18 марта 2012

Я успешно закодировал переадресацию / переписывание URL-адресов, однако все это выглядит довольно неубедительно и ненадежно, и похоже, что сервер на самом деле даже не «переписывает».переписать все 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>

Эта часть работает, однако часть "(. *) $" кажется слишком свободнойтак как это позволяет использовать все.Он должен быть ограничен буквами, цифрами и "-", "_".Кроме того, после переписывания (?) В адресной строке браузера отображается URL-адрес venueview.php, который, я думаю, не является идеей, конечно же, я также хотел бы проиндексировать мои URL-адреса поисковыми системами в 'хороший формат вместо числовых параметров.

Часть в 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 Ответ

1 голос
/ 18 марта 2012

Перезапись не перенаправляет.Перенаправление - это изменение входящего запроса, чтобы на странице было видно, что он был отправлен на страницу.

.* означает совпадение с любым (.) любое количество раз (*)

Вам нужно изменить шаблон, чтобы он соответствовал формату ваших слагов.Если вы хотите, чтобы разрешалось использовать только буквы, используйте [a-zA-Z].

. Для получения более подробной информации о том, какой шаблон должен быть на вашей странице, смотрите синтаксис Regex .

...