如何在PHP中拥有干净的URL


How to have clean URL's in PHP

有什么方法可以在PHP中拥有好看的URL吗? 任何默认的 PHP URL 都如下所示: http://example.com/something/?post=something 但是有没有可能像这样: http://example.com/something/user 是否可以在不使用 .htaccess 的情况下删除 ?post=

这是我一直在处理的一些示例代码,单击帖子后它将访问我的数据库并加载内容:

<?php 
if(!isset($_GET['post'])) {
    $q = mysql_query("SELECT * FROM posts WHERE postID='something'");
} else {
    $id = $_GET['post'];
    $id = mysql_real_escape_string($id);
    $q = mysql_query("SELECT * FROM posts WHERE postID='$id'");
}
$p = mysql_fetch_object($q);
?>

谢谢你的时间!

要获得干净的 URL,您必须使用mod_rewrite模块,但如果将 url 解析保留到您自己的脚本并且只有一个入口点,则可以最大限度地减少它的使用。看看它在WordPress中是如何制作的:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index'.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>

因此,如果 URL 中没有请求的实际文件或目录,则每个请求都会重定向到 index.php,然后由某个内部路由映射脚本解析。

在类似的问题中有一个这样的脚本的例子。

我建议让干净的URL使用默认具有此功能的php框架之一。如果你想使用纯PHP,你应该在你的项目中使用路由器,这意味着你应该编写自己的PHP框架。你曾经使用过任何PHP框架吗?我建议使用laravel或cakephp作为学习php框架的切入点。

您需要在项目中定义路由器和调度程序。路由器提取与 url.in 另一个词相关的函数的 url 和调度程序调用,您应该在项目中嵌入前端控制器设计模式。我建议查看本教程http://www.sitepoint.com/front-controller-pattern-1/