4

如何制作 www.mydomain.com/folder/?id=123 ---> www.mydomain.com/folder/xCkLbgGge

我希望我的数据库查询页面获得它自己的 URL,就像我在 twitter 等上看到的那样。

4

3 回答 3

7

这被称为“蛞蝓”wordpress,使这个词很受欢迎。无论如何。

最终,您需要做的是拥有一个 .htaccess 文件,该文件可以捕获所有传入流量,然后在服务器级别对其进行改造以与您的 PHP 一起使用,您仍将保持 ?id=123 逻辑完整,但对客户端side '/folder/FHJKD/' 将是可见的结果。

这是一个 .htaccess 文件的示例,我在上面使用了类似的逻辑。(wordpress 也是如此)。

RewriteEngine On
#strips the www out of the domain if there
RewriteCond %{HTTP_HOST} ^www\.domain\.com$

#applies logic that changes the domain from http://mydomain.com/post/my-article
#to resemble http://mydomain.com/?id=post/my-article
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?id=$1 [QSA,L]

这将做的是获取 domain.com/ 之后的所有内容并将其作为变量传递给 index.php 在此示例中的变量将是“id”,因此您必须设置最适合您网站需求的逻辑。

例子

<?php
 //the URL for the example here: http://mydomain.com/?id=post/my-article
 if($_GET['id'])
 {
   $myParams = explode('/', $_GET['id']);
   echo '<pre>';
   print_r($myParams);
   echo '</pre>';
 }
?>

现在这个逻辑必须更深入,这只是一个基本级别的纯示例,但总体而言,特别是导致您使用我假设的数据库,您要确保 $myParams 没有恶意代码,那可以注入您的 PHP 或数据库。

上述$myParams通过的输出print_r()将是:

Array(
   [0] => post
   [1] => my-article
)

要使用它,您至少需要做

echo $myParams[0].'<br />';

或者你可以这样做,因为大多数浏览器会添加一个最终 /

<?php
 //the URL for the example here: http://mydomain.com/?id=post/my-article
 if($_GET['id'])
 {
   //breaks the variable apart, removes any empty array values and reorders the index
   $myParams = array_values(array_filter(explode('/', $_GET['id'])));
   if(count($myParams > 1)
   {
       $sql = "SELECT * FROM post_table WHERE slug = '".mysql_real_escape_string($myParams[1])."'";
       $result = mysql_query($sql);
   }

 }
?>

诚然,这是一个非常粗略的示例,您可能希望在其中处理一些逻辑以防止 mysql 注入,然后您将像现在使用 id=123 提取文章一样应用查询。

或者,您也可以走完全不同的路线,探索 MVC(模型视图控制)的奇妙之处。CodeIgniter 之类的东西是一个非常容易上手的 MVC 框架。但这取决于你。

于 2012-06-13T20:19:04.737 回答
3

这可以通过mod_rewrite例如.htaccess文件来实现。

于 2012-06-13T20:08:05.010 回答
1

在您的 .htacess 中,您需要添加 RewriteEngine。

在那之后,你需要做一些正则表达式来让这个小野兽工作。我假设 ?id 是 folder.php?id=123。

例如文件夹片段:RewriteRule ^folder/([a-zA-Z0-9_-]+)/([0-9]+).html$ folder.php?id=$123

于 2012-06-13T20:15:13.813 回答