如何制作 www.mydomain.com/folder/?id=123 ---> www.mydomain.com/folder/xCkLbgGge
我希望我的数据库查询页面获得它自己的 URL,就像我在 twitter 等上看到的那样。
如何制作 www.mydomain.com/folder/?id=123 ---> www.mydomain.com/folder/xCkLbgGge
我希望我的数据库查询页面获得它自己的 URL,就像我在 twitter 等上看到的那样。
这被称为“蛞蝓”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 框架。但这取决于你。
这可以通过mod_rewrite
例如.htaccess
文件来实现。
在您的 .htacess 中,您需要添加 RewriteEngine。
在那之后,你需要做一些正则表达式来让这个小野兽工作。我假设 ?id 是 folder.php?id=123。
例如文件夹片段:RewriteRule ^folder/([a-zA-Z0-9_-]+)/([0-9]+).html$ folder.php?id=$123