如何在PHP中使用干净的URL

时间:2014-12-06 09:50:22

标签: php url clean-urls

我有什么方法可以在PHP中拥有漂亮的URL吗?任何默认的php URL都是这样的:http://example.com/something/?post=something但是可以这样:http://example.com/something/user是否可以删除?post =而不使用.htaccess

以下是我一直在处理的一些示例代码,点击帖子后会访问我的数据库并加载内容:

<?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);

?>

感谢您的时间!

3 个答案:

答案 0 :(得分:1)

要获得干净的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,然后由某个内部路由映射脚本进行解析。

similar question中有一个这样的脚本示例。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您需要在项目中定义路由器和调度程序。路由器提取与url.in相关的功能的url和dispatcher调用,你应该在项目中使用 frontcontroller 设计模式。我建议查看本教程 http://www.sitepoint.com/front-controller-pattern-1/