htaccess: Как отобразить переменные GET? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть код, который отображает новости. но теперь я хочу использовать .htaccess, чтобы скрыть id=2 бла .. Все работает нормально, но он не отображает переменные get

Я пытался использовать [L,QSA], [NC,QSA] никто не работает

// получаем переменные

<?php
if (isset($_GET['id']) && !empty($_GET['id'])) {
    $id        = $_GET['id'];
    $stmt_edit = $pdo->prepare('SELECT * FROM articles WHERE id =:uid');
    $stmt_edit->execute(array(
        ':uid' => $id
    ));
    $edit_row  = $stmt_edit->fetch(PDO::FETCH_ASSOC);
    $image     = $edit_row['headline_image'];
    $article   = $edit_row['article_body'];
    $headlines = $edit_row['headlines'];
    $date      = $edit_row['date'];
    $month     = $edit_row['month'];
    $admin     = $edit_row['admin'];
} else {
    header("Location: index.php");
} 

//. Htaccess код

Options  -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} -f

RewriteRule ^ - [L]
RewriteRule ^index?$ index.php
RewriteRule ^news/([0-9]+) news.php?id=$newsid [L,QSA]

Я использую переменные вне функций get, которые хочу отображать содержимое соответствующей переменной.

1 Ответ

1 голос
/ 30 мая 2019
RewriteRule ^news/([0-9]+) news.php?id=$newsid [L,QSA]

Почему $newsid? $newsid здесь рассматривается как буквальная строка, поэтому $id (т.е. $_GET['id']) в вашем PHP-коде всегда будет буквальной строкой "$newsid" (но, вероятно, вы видели это при отладке вашего PHP-кода?)

Вместо этого вы должны использовать обратную ссылку $1. Например:

RewriteRule ^news/([0-9]+) news.php?id=$1 [L,QSA]

В сторону: Вы также можете захотеть привязать конец строки ($) к шаблону RewriteRule , иначе это будет соответствовать /news/123anything. Или, может быть, это намерение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...