htaccess:如何显示GET变量?

时间:2019-05-30 16:37:35

标签: php regex .htaccess mod-rewrite

我有显示新闻的代码。但现在我想使用.htaccess隐藏id=2 bla。 一切正常,但不显示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 个答案:

答案 0 :(得分:1)

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

为什么$newsid$newsid在这里被视为文字字符串,因此您的PHP代码中的$id(即$_GET['id'])将始终是文字字符串"$newsid"(但是您可能已经看到了在调试PHP代码时?)

您应该改用$1反向引用。例如:

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

旁边:您可能还希望在$ 模式上使用字符串结尾锚点(RewriteRule),否则将导致匹配/news/123anything。还是那是目的?