如何设计文档/内容应用程序,其中URI应该用于选择内容

时间:2012-09-13 13:12:48

标签: php web-applications apache2 apache

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您几乎创建了一个REST界面,但由于您希望直接提供文档,因此并不完全。

我建议的结构如下:

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

添加"视图"和"搜索"父母"文件夹"防止碰撞;如果您只有http://example.com/docs/read_this作为文档视图架构(并按原样保留搜索架构),则您永远不会有一个名为search的文档,因为它会与特殊的search术语发生冲突。您还提到了编辑,可以使用http://example.com/edit/read_this架构完成。

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

编辑:这里需要.htaccess和PHP链接

htaccess的:

这是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>

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

的index.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;
}
?>

答案 1 :(得分:1)

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

例如,如果您使用apache并且只希望对www.mydomain.com/docs/read_this格式的URI进行此类映射,那么您可以在docs文件夹中重定向.htaccess(通过{{ 3}})对单个php脚本(如docs / index.php)的所有请求,然后可以解析$_SERVER['REQUEST_URI']变量以获取URI(read_this)中的文档名称,然后请求来自mysql DB的相应文档。