永久链接,.htaccess漂亮的网址

时间:2011-10-03 09:08:54

标签: php mysql .htaccess mod-rewrite permalinks

如果我讨厌你们,我真的很抱歉,但这是关于.htaccess技巧的最后一个问题

我需要wordpress风格,'非常永久链接'

但这对我来说太混乱了。

我需要,此网址http://test.com/?page=test&ID=1http://test.com/test/NAMEFROMDATABASE

如何?我知道如何使用ID=1获取$_GET['ID'],但如何将数据库中的值放入网址并阅读?

3 个答案:

答案 0 :(得分:6)

您无法直接通过此网址获取$ _GET ['ID']的ID值:http://test.com/test/NAMEFROMDATABASE

您可以按照以下逻辑获取ID。

  1. 按类别名称创建链接。即如果您有类别笔记本电脑,请创建http://test.com/category/CATNAME

  2. 之类的链接
  3. 在htaccess中写入重写代码。RewriteRule ^category/(.*)$ categories\.php?CNAME=$2&%{QUERY_STRING} [L]

  4. PHP代码中的
  5. 从类别名称中获取类别ID。$catName=$_GET['CNAME']
  6. OR

    1. 按类别名称和类别ID创建链接。即如果您有类别笔记本电脑,请创建http://test.com/category/CATNAME-ID-CATID
    2. 之类的链接
    3. 在htaccess中写入重写代码。 RewriteRule ^category/(.*)-ID-([0-9]+)$ categories\.php?ID=$2&%{QUERY_STRING} [L]
    4. PHP代码中的
    5. 直接获取类别ID。 $catID= $_GET['ID']

答案 1 :(得分:1)

  

如何?我知道如何使用$ _GET ['ID']获取ID = 1,但是如何将数据库中的值放入url中并读取它?

您可以从数据库中获取值,如下所示:

$id = mysql_real_escape_string($_GET['id']);
$sql = "SELECT folder, urlname FROM urls WHERE id = '$id' ";
// don't forget to single quote '$id'       ^   ^  or you'll get errors
// and even worse mysql_real_escape_string() will not protect you.
if ($result = mysql_query($sql)) {
  $row = mysql_fetch_row($result);
  $pagename = $row['urlname'];
  $folder = $row['folder'];
}

如果您知道id是一个整数,您也可以使用$id = intval($_GET['id']);
我建议始终使用mysql_real_escape_string(),因为它适用于所有值,intval仅适用于整数 在SQL中引用数字永远不是问题,所以要养成一直引用所有内容的习惯 这样你就不会犯错误。

你可以从不

$sql = "SELECT urlname FROM urls WHERE id = '{$_GET['id']}' ";

因为这是一个SQL注入安全漏洞。

请参阅:
How does the SQL injection from the "Bobby Tables" XKCD comic work?
http://php.net/manual/en/function.mysql-query.php
http://php.net/manual/en/function.mysql-fetch-row.php
http://php.net/manual/en/function.mysql-connect.php
http://php.net/manual/en/function.mysql-close.php

答案 2 :(得分:1)

你不能在htaccess中这样做,你需要调整你的脚本,而不是接收id = 1将收到name = xxx。比在数据库中查找名称并计算ID

好的,所以.htaccess你会有类似的东西

RewriteRule ^something/(.+)\.htm$ something/file.php?djname=$1 

在您的PHP脚本中,您将拥有

$name = mysql_real_escape_string($_GET['djname']);

$sql = "SELECT * FROM djtable where name='" . $name . "' LIMIT 1";

OBS:1。使用正确的sql转义。 2.确保数据库中的dj名称不同。