【问题标题】:How to have clean URL's in PHP如何在 PHP 中拥有干净的 URL
【发布时间】:2014-12-06 09:50:22
【问题描述】:

有什么方法可以让我在 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);

?>

感谢您的宝贵时间!

【问题讨论】:

  • 学习使用 .htaccess 重写 URL
  • Eiter 使用 .htaccess 规则,或者如果您使用 Wordpress,您可以深入了解 codex.wordpress.org/Rewrite_API,它是 .htaccess 的包装器
  • 我们不使用 WordPress,我们有自己的 CMS。
  • 您应该研究一下 WordPress 的工作原理,它会对您有用。
  • 感谢您的提示!

标签: php url clean-urls


【解决方案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 中有一个此类脚本的示例。

【讨论】:

  • 是的;有一个“PHP URL 路由”的谷歌;你会发现一堆关于在代码中完成调度的单个入口点如何工作的不错的解释/教程。
  • 是 .htaccess 还是 PHP?
  • .htaccess 如何帮助我?因为我的 URL 是动态的,所以所有 postID 都是动态的。
  • @mrezajafari 为您提供了 FrontController 模式的链接,请阅读 - 那里解释了一切。简而言之,您将每个请求重定向到 index.php,然后解析 $_SERVER["REQUEST_URI"] 并调用所需的函数。
【解决方案2】:

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

【讨论】:

  • 我建议开始使用 laravel。它易于使用,也易于学习。 laravel 有很多视频教程和简单的文档可供学习。如果你以前没有使用过任何框架,那么开始编写自己的框架是不明智的。
【解决方案3】:

你需要在你的项目中定义一个Router和Dispatcher。Router提取url和dispatcher调用与url相关的函数。换句话说,你应该在你的项目中引入frontcontroller设计模式。我建议查看本教程 http://www.sitepoint.com/front-controller-pattern-1/

【讨论】:

    猜你喜欢
    • 2017-04-26
    • 1970-01-01
    • 2014-09-23
    • 2013-02-18
    • 2019-11-22
    • 2011-02-21
    • 2017-11-13
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多