PHP动态数据库页面重写URL

PHP动态数据库页面重写URL,php,url-rewriting,dynamic-pages,Php,Url Rewriting,Dynamic Pages,如何创建www.mydomain.com/folder/?id=123-->www.mydomain.com/folder/xcklbgge 我想让我的DB查询页面获得自己的URL,就像我在twitter等网站上看到的那样。这可以通过mod_rewrite实现,例如通过.htaccess文件。在你的.htaccess中,你需要添加RewriteEngine 在那之后,你需要做一些正则表达式来让这个小家伙工作。我假设?id是folder.php?id=123 例如,文件夹部分:RewriteRul

如何创建www.mydomain.com/folder/?id=123-->www.mydomain.com/folder/xcklbgge


我想让我的DB查询页面获得自己的URL,就像我在twitter等网站上看到的那样。

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

在你的.htaccess中,你需要添加RewriteEngine

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


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

这就是众所周知的slug-wordpress,它使这个术语流行起来。无论如何

最终,您需要做的是创建一个.htaccess文件,该文件捕获所有传入的流量,然后在服务器级别对其进行修改,以便与PHP一起工作。从某种意义上说,您仍然可以保持?id=123逻辑的完整性,但对于客户端来说,“/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>';
 }
?>
要使用它,您至少需要执行以下操作

<?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框架,可以开始使用。但这取决于你。

要让它工作起来似乎很复杂。我需要在将由用户添加到数据库的页面上使用它。这项技术有没有可行的例子我在描述这一点时遇到的唯一一个问题是,需要更改apache服务器设置。。这几乎是实现你想要的唯一途径。您需要按照我提到的方式使用htaccess,然后基于此,每个传入的请求都将经过index.php。com/之后的任何内容都将被视为一个变量,非常类似于$\u GET参数ie:.com/?id=123。因此,您基本上是以通常相同的方式构建站点,同样的逻辑适用于从数据库获取数据,就像之前一样,您只需在初始加载时稍微不同地使用get variable。幸运的是,在这之后,没有一个示例显示为每个人都有一个不同的需要。在我的示例中,我使用explode将ID变量转换为数组,因此$myParams[0]将是您的跳转点。现在,大多数人将向这些数据库表中添加一个额外的列,至少通过这种方式,他们可以很容易地将他们所拥有的内容与这个概念相一致,而不需要做太多更改。现在,这一列将是slug.com/my article在你的URL中的一部分,该列将存储我的文章,你将查找它,并像处理任何其他DB Pull一样使用它。我更新了我的原始帖子,以扩展我所说的内容。然而,正如我所说的不幸的是,因为所有的需求都是不同的,所以在似乎没有什么逻辑可循的情况下,没有一个独特的例子可以使用。总而言之,要实现您想要的目标,唯一的方法是从最初的htaccess补丁开始,该补丁会根据您的需要覆盖apaches的核心行为,然后在这之后,一切都取决于您如何使用所选的PHP或服务器端脚本语言。如果您愿意,我们非常欢迎您联系我,也许我们可以帮您解决问题。非常感谢!我会试着进入这个话题,尽管还有很多问号。我先从基本的开始,试着理解这个概念。我能想到的唯一替代解决方案是编写一个脚本,创建一个index.php文件,其中包含db代码,并将其放入一个具有随机名称的文件夹中。不过没那么整洁。
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);
   }

 }
?>