0

ディレクトリ構造にドキュメント(html形式)/コンテンツを持つアプリケーションを設計する方法を理解しようとしています。私が欲しいのは、URLがどのドキュメントを提示するかを決定する必要があるということです。たとえば、www.mydomain.com / docs / read_thisは、「read_this」という名前のコンテンツを表示するのに何らかの形で役立つはずです。

また、ユーザーがドキュメントを完全に検索できるようにしたいと思います。まず、すべてのドキュメントをMySQLに保存し、完全検索の組み込みサポートを使用することを目的としていました。しかし、URIとコンテンツの問題を解決する方法に行き詰まりました。コンテンツを作成または編集できるはずなので、データベースに保存すると、ファイルに保存するよりも簡単になります。

これは通常の方法であり、多くのサイトがこのように実装しています。それでも、それを解決する方法については何も見つかりません。おそらく、グーグルに使用される言葉は他の情報と似ています。ドキュメント、ディレクトリ、構造、コンテンツ、URIなど...

CentOS6.2でApache/httpdとPHPを使用しています。

上記の問題を解決するためのアプローチは何ですか?

4

2 に答える 2

1

あなたが説明しているものは、一般に RESTful URI と呼ばれます。「これが正しい方法だ」と言うには、これを実装する方法が多すぎます。

たとえば、apache を使用していて、この種のマッピングをフォームの URI に対してのみ発生させたい場合www.mydomain.com/docs/read_this.htaccess、 docs フォルダーに、( mod_rewriteを介して) すべてのリクエストを単一の php スクリプト ( docs/index. php) を作成し、$_SERVER['REQUEST_URI']変数を分析して URI ( read_this) にあったドキュメント名を取得し、mysql DB から適切なドキュメントを要求することができます。

于 2012-09-13T13:27:03.680 に答える
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、ドキュメントに名前を付けることはできません。また、スキーマで実行できる編集についても言及しました。searchsearchhttp://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>

これは技術的には、人々が URL を入力しhttp://example.com/docs/view/read_thisたりhttp://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;
}
?>
于 2012-09-13T13:24:01.780 に答える