自定义内容管理系统,像商业内容管理系统一样的美观固定链接。

5
我目前正在为我的个人项目打造一个非常基本的CMS。这对我自己的教育同样重要。我有一个问题,如何在没有文件扩展名的情况下实现URL /永久链接。我知道使用get变量从数据库中提取数据,但如何将其转换为像www.url.com/posttitle这样的东西,而不是像www.url.com/?posttitle='blablabla。
此外,在稍微不同的话题上,有人能否指点我一个易于使用的框架来开发处理会员和会员列表(例如craigslist)的网站。
我目前在wordpress中开发,相当熟练,但对OOPHP和从基础层面进行自定义CMS开发不太熟悉。
感谢您提前提供任何帮助或建议。

可能是PHP框架中的美化URL的重复问题。 - mario
可能是网络应用程序的美化URL的重复。 - mario
3个回答

9
您可以使用一个.htaccess文件将所有请求发送到前端控制器(通常只是一个index.php脚本),然后该脚本将传入的请求与数据库中的记录进行匹配。
例如,如果您有一个名为pages的数据库表,包含四列:idtitleslugcontent,以下是一个简单的实现...
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php/$1 [NC,L]

这条指令告诉Apache将所有不是文件或目录的请求发送到index.php
然后,你的index.php可以如下所示:
<?php
// Take request URI
// Would be something like 'your-slug'
$request = trim($_SERVER['REQUEST_URI'], '/');

// Set up database connection and attempt to match slug
$sql = "SELECT * FROM pages WHERE slug = ? LIMIT 1";
$smt = $db->prepare($sql);
$smt->execute(array($request));

$page = $smt->fetchObject();

if (! $page) {
    // Page was not found matching slug
    header('HTTP/1.1 404 Not Found');
    exit;
}

// Display matching page in a template

从这里开始,您可以进一步构建它。


2
无文件扩展通常是URL路径的抽象结果 - 这意味着您的应用程序应该解释URL后面的所有内容,并基于此开始呈现数据。
考虑以下内容:
http://www.url.com/about-us
在正常的HTTP请求(例如在Apache上),Apache会尝试提供名为 /about-us 的公共文件夹,由于未指定静态 index.php 文件。
对于任何流行的MVC框架,如CodeIgniter、CakePHP、Ruby on Rails等,/about-us将匹配所谓的路由,该路由加载与该页面相关的资产。因此,它不是加载静态页面,而是到数据库中获取该页面的数据,获取模板,并动态提供文件。这基本上是获得“漂亮”URL的一种方式。
如果您想自己开发,我强烈推荐使用以上任何一个框架。但是,在使用之前请先理解它们 - 尝试了解执行过程。掌握每个请求确切执行的内容。
至于身份验证,我知道Rails中有几个选项,如Devise和CanCan。这些基本上是预编码的身份验证模块,允许您轻松配置它们。

2

您可以通过URL重写(位于网站目录结构根目录下的.htaccess文件)来轻松实现此操作。

或者,您可以将所有内容重写为例如index.php,然后在此处解析它。

您只需从$_SERVER变量中获取url的URI部分(查看“QUERY_STRING”或仅使用var_dump($_SERVER)查看哪个键包含哪个内容)。

以下是重写所有内容的示例.htaccess文件:

RewriteEngine on
# rewrite everything except for assets to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css)$ /index.php [L]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接