3

私のDocRoot:

/var/www/project/templates/index.html
/var/www/project/templates/about.html
/var/www/project/templates/contact.html
/var/www/project/templates/press/2013/01 /01/mypresspost1
/var/www/project/templates/press/2013/01/02/mypresspost2
/var/www/project/templates/blog/2013/01/01/myblogpost1
/var/www/project/templates/blog /2013/01/02/myblogpost2

目標:

短縮 URL を使用して内部ファイル パスを検索します。
したがって、ヒットmysite.com/myblogpost2すると、実際にロードさ/blog/2013/01/02/myblogpost2
れます。テンプレートエンジンを使用しているため、パスは次のようにフロントエンドで使用可能になります。{include file="{$path}"}

私のブートストラップ:

RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* /index.php

myblogpost2URI から文字列を取得する方法が既にあると仮定しましょう。
これで、内部パスを解決するだけの問題になるので、設定できます$path

アイデア:

私にはいくつかのアイデアがありますが、これらは私の問題をよりよく説明するためのものです。
最終的には最適なルートを探しているので、アドバイスをいただければ幸いです。

フラット ファイルから JSON を使用します。

{
    "myblogpost1":   {longpath:"/blog/2013/01/01/myblogpost1"},
    "myblogpost2":   {longpath:"/blog/2013/01/02/myblogpost2"}
}

$string = "myblogpost1";
$path = objJsonResp[$string]->longpath;

テーブルをクエリします。

$path = SELECT longPath FROM shortUrls WHERE name = :name
4

1 に答える 1

0

動的に作成されたエントリがあるため、mysql テーブルでこれを行います。「エイリアス」の作成内:

  • タイトルのエイリアスを作成し、特殊文字などを削除します。アンダースコアへのスペース...など
  • その文字列のエイリアスが既に存在するかどうかを確認します
  • その場合は、最後に -1 を配置し、もう一度チェックします。まだ存在する場合は、一意のものが見つかるまで番号を増やします。
  • エイリアスと宛先を保存します。
  • 一意の ID をお持ちだと思いますので、この ID を保存しておいてください。日付を変更すると、リンク先 URL が以前と同じでなくなる可能性があります。
  • .htaccess 内では、すべての着信要求を特定のファイルに書き直して、文字列がエイリアスであるかどうかをチェックする必要があることは明らかです。
  • その「ページ」から一意の ID を取得した場合は、投稿の日付を読み取ってロケーション ヘッダーでリダイレクトし、この情報を使用して実際の URL を作成できます。
  • パフォーマンスを失わないように、この「蓄積」をキャッシュします。
于 2013-01-11T12:30:58.820 に答える