挑战"漂亮链接"

时间:2013-12-17 12:12:36

标签: php url permalinks

我的网站有以这种格式的网址:

  

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

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

  

http://example.com/SuperEvento2013

并显示

的内容
  

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

所以,我在.htaccess上做了一个规则,我创建了一个transform.php,在那里我收到了参数event:

$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保持一致,而不向用户显示此uglies URL?

1 个答案:

答案 0 :(得分:1)

您无需使用“transform.php”页面。

而是让您的重写为RewriteRule .*/teste/link/produto/evento.php?event=$1 [L]

在“evento”页面中,使用转换中的代码来设置事件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