0

我正在尝试重写/example-friendly-url以显示/posts.php?id=1.

友好的 url 值和 id 都存储在 mysql 表中。

这是我到目前为止所写的,但有些地方不对:

帖子.php:

include('/functions.php');
$post = getPost($_GET['id']);
$param = getSlug($_GET['param']);

函数.php:

function getPost($id) {
    $id = (int) $id;
    $query = mysql_query("SELECT * FROM list WHERE id = '$id'") or die(mysql_error());
    return mysql_fetch_assoc($query);
}

function getSlug($param) {
    $query = mysql_query("SELECT id FROM list WHERE slug = '$param'") or die(mysql_error());
    return mysql_fetch_assoc($query);
}

.ht 访问:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/posts.php
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^/(.*)$ %{DOCUMENT_ROOT}/posts.php?param=$1 [NC,L]

任何帮助将非常感激。

4

1 回答 1

0

在 htaccess 文件中处理 mod_rewrite 规则时,会删除前导斜杠,因此您不希望^/正则表达式前面的斜杠:

RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/posts.php?param=$1 [NC,L]

你正在传递一个“蛞蝓”作为_GET['param']. 没有“身份证”。你需要做的posts.php是把那个蛞蝓变成一个ID:

include('/functions.php');

$post_id = getSlug($_GET['param']);
$post = getPost($post_id);

当然,确保使用mysql_real_escape_string(已弃用,您真的想使用mysqli)之$_GET['param']类的东西对其进行清理。

于 2013-07-09T21:51:42.923 回答