繁体   English   中英

挑战“漂亮链接”

[英]Challenge “Pretty Links”

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

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 = $_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并在其中执行header(location)。

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

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

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

在“事件”页面中,使用转换时使用的代码例如事件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。

另外,请考虑对MySQL查询使用PDO。 (查找“ mysql注入”)。

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

暂无
暂无

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

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