繁体   English   中英

htaccess-用php和mysql重写URL

[英]htaccess - rewrite urls with php and mysql

我正在尝试重写/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]

任何帮助将非常感激。

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

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

您正在通过_GET['param']传递“子弹”。 没有“ id”。 您需要在posts.php执行的posts.php是将其转换为ID:

include('/functions.php');

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

当然,请确保使用$_GET['param'] mysql_real_escape_string之类的东西对$_GET['param']进行清理(不建议使用,您确实想使用mysqli )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM