0

我试图弄清楚如何设计一个在目录结构中包含文档(html 格式)/内容的应用程序。我想要的是 URL 应该决定应该呈现哪个文档。例如 www.mydomain.com/docs/read_this 应该以某种方式帮助我呈现名为“read_this”的内容。

我还希望用户能够全面搜索文档。首先,我打算将所有文档存储在 MySQL 中,并使用内置的完整搜索支持。但我陷入了如何解决 URI 与内容的问题。由于应该可以创建或编辑内容,我认为将其存储在数据库中会比将其放入文件更容易。

这是正常的做法,很多网站都是这样实现的。不过,我找不到任何关于如何解决它的信息。也许用于谷歌搜索的词与其他信息相似;文档、目录、结构、内容、URI 等...

我在 CentOS 6.2 上使用 Apache/httpd 和 PHP。

解决上述问题的方法是什么?

4

2 回答 2

1

您几乎是在创建一个 REST 接口,但由于您想直接提供文档,所以并不完全如此。

我建议这样的结构:

  • http://example.com/docs/:应用程序的根级别(显示有关应用程序的一些信息
  • http://example.com/docs/view/read_this:显示名为“read_this”的文档
  • http://example.com/docs/search/keyword:显示包含关键字“keyword”的文档列表

添加“视图”和“搜索”父“文件夹”可防止冲突;如果您只是http://example.com/docs/read_this作为文档视图架构(并保留搜索架构原样),您将永远无法命名文档,因为这会与特殊术语search冲突。search您还提到了编辑,这可以通过http://example.com/edit/read_this模式来完成。

为了解析所有这些 URI,您需要在 Apache 配置中使用 Mod_Rewrite 将它们指向您的 PHP 脚本。

编辑:这是.htaccess所需的 PHP 链接

.ht 访问:

它位于文件夹的根docs目录中,旁边是index.php

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^([a-z]+)/([A-Za-z0-9_-]+)/?$ index.php?action=$1&target=$2 [QSA,L]
</IfModule>

这在技术上意味着人们可以输入 URLhttp://example.com/docs/view/read_thishttp://example.com/docs/index.php?action=view&target=read_this得到相同的结果

索引.php:

<?php
$action = (isset($_GET['action']) && $_GET['action'] != '')? $_GET['action'] : false;
$target = (isset($_GET['target']) && $_GET['target'] != '')? $_GET['target'] : false;
switch($action) {
  case 'view':
    viewDoc($target); // Do your view logic here
    break;
  case 'search':
    doSearch($target); // Do your search logic here
    break;
  case 'foobar':
    // Add new functionality here
    break;
  default:
    errorOut('No such action as '.$action);
    break;
}
?>
于 2012-09-13T13:24:01.780 回答
1

您所描述的通常称为 RESTful URI。有太多方法可以实现这一点,不能说“这是正确的方法”。

例如,如果您使用 apache,并且您只希望这种映射发生在表单的 URI 上,www.mydomain.com/docs/read_this那么您可以.htaccess在 docs 文件夹中有一个重定向(通过mod_rewrite)所有请求到单个 php 脚本(如 docs/index.html)。 php) 然后可以剖析$_SERVER['REQUEST_URI']变量以获取 URI ( read_this) 中的文档名称,然后从您的 mysql DB 请求适当的文档。

于 2012-09-13T13:27:03.680 回答