挑战“;漂亮的链接";


Challenge "Pretty Links"

我有一个网站的URL格式如下:

http://example.com/teste/link/produto/evento.php?evento=1234&origem=站点

我想做的是如果用户输入这个:

http://example.com/SuperEvento2013

并显示的含量

http://example.com/teste/link/produto/evento.php?evento=1234&origem=站点。

因此,我在.htaccess上制定了一条规则,并创建了一个transform.php,在那里我接收参数事件:

$event = $_REQUEST['event'];
$select_evento = mysql_query("SELECT * FROM evento WHERE alias = '$event'") or die(mysql_error());
$evento = mysql_fetch_array($select_evento);
$count_evento = mysql_num_rows($select_evento);
echo $event;
if ($count_evento > 0) {
    header("Location:/teste/link/produto/evento.php?evento=".$evento['id']);
} else {
    echo "Ops, o evento que tentou acessar não existe. Verifique o endereço digitado."; 
} 

我的.htaccess看起来是这样的:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .*transform.php?event=$1 [L]

它在哪里调用transform.php,他在哪里执行头(位置)。

问题是:我如何使我的链接与URL保持友好,而不在URL前面键入参数,也不向用户显示这些丑陋的URL?

您不需要使用"transform.php"页面。

相反,使您的重写为RewriteRule .*/teste/link/produto/evento.php?event=$1 [L]

在您的"evento"页面中,使用您在转换中的代码来egt事件ID。然后使用此ID来显示您需要的任何内容:

$event = $_REQUEST['event'];
$select_evento = mysql_query("SELECT * FROM evento WHERE alias = '$event'") or die(mysql_error());
$evento = mysql_fetch_array($select_evento);
$count_evento = mysql_num_rows($select_evento);
$event_id = $evento['id'];

基本思想是,不要重定向用户。只需在最后的PHP页面中使用ID即可。

附带说明一下,请考虑将PDO用于MySQL查询。(查找"mysql注入")。

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers