我目前正在构建自己的(非常小的)CMS。我使用 PHP/MySQL 和 mod_rewrite 从数据库动态获取页面请求。
到目前为止,我的结构如下:
domain.com/page
这一切都工作得很好。但现在我想添加“文件夹”或“类别”。
该表具有所需字段(简化):
id, name, pid (parent id)
我还弄清楚了如何从数据库构建导航结构,但到目前为止我还没有弄清楚如何使用 mod_rewrite 和 PHP 从数据库获取请求的页面。
- 如何获取请求的网址,例如
domain.com/folder1/page
或更复杂domain.com/folder1/folder2/folder3/.../folderN/page
- 如何区分“folder1”中的文档“page”和“folderN”中的文档“page”?
- 如何处理不存在的文件夹(例如上例中的“folder2”)?
嗯,说实话我现在有点无助,希望这里有人愿意帮助我。 :-)
当然,我在 stackoverflow 上进行了谷歌搜索,但没有找到任何具体的帮助。也欢迎提供教程链接。
提前致谢并致以最诚挚的问候!
最佳答案
这里的主要问题是 Apache 无法与 MySQL 通信,因此它不知道哪些文件夹存在或不存在。
大多数 CMS(例如 WordPress)解决此问题的方法是将每个不针对现有文件或目录的请求重定向到 CMS 的入口脚本。
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .? index.php [L]
然后在index.php中检查$_SERVER['REQUEST_URI']
以查看请求的用途并进行相应的处理。
$parts = explode('/', ltrim($_SERVER['REQUEST_URI'], '/'));
foreach($parts as $part)
{
// see what the part is for, and if it does not exist
// if you find that the request does not exist, send a 404 back to the browser
// header($_SERVER['HTTP_PROTOCOL'].' 404 Not Found');
}
关于php - 使用 PHP、MySQL 和 mod_rewrite 从数据库获取页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16558132/