0

/example-friendly-urlの内容を表示するように を書き換えようとしています/posts.php?id=1

分かりやすい URL の値と ID の両方が mysql テーブルに保存されます。

ここまで書いてきましたが、何かがおかしいです。

posts.php:

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

functions.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);
}

.htaccess:

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

^/mod_rewrite ルールが htaccess ファイルで処理されると、先頭のスラッシュが削除されるため、正規表現の前には必要ありません。

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

「スラッグ」を として渡してい_GET['param']ます。「id」はありません。あなたがする必要があるのposts.phpは、そのスラッグを ID に変えることです:

include('/functions.php');

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

もちろん、 mysql_real_escape_string のようなものを使用してサニタイズされていることを確認してください$_GET['param'](非推奨、本当にmysqliを使用したい)。

于 2013-07-09T21:51:42.923 に答える