0

私は古いウェブサイトのURLを「きれい」にするという任務を負っています

これは、数十の建物とおそらく100件のアパートのリストがある不動産のWebサイトです。

現在のURLは次のようなものです:(私はで.php拡張子を簡単に削除することができました.htaccess

example.com/about?building-id=65
example.com/about?apartment-id=35

それはそれよりもかなり複雑になり、いくつかの検索ページ、さまざまなリストビュー、建物またはaptIDを送信してフォームに情報を事前入力するための連絡フォームページなどがあります。

しかし、この例では...

理想的には、URLは

example.com/about/building-name/
example.com/about/building-name/apartment-name

建物名とアパート名はどちらもデータベースに保存されている値であり、主キーはID番号です。

この問題を少し調査した後、私はいくつかの異なるアプローチを決定しました

1)管理者の変更時にファイルを動的に生成する.htaccess

  • 私はこれを正しく行うことができると思いますか?
  • 可能なほぼすべての有効なクエリ文字列の可能性を明示的に書き換えます(おそらく最大数百)
  • これによりパフォーマンスの問題が発生する可能性があり、おそらくベストプラクティスではないと思います。
  • それが最も簡単なオプションである場合、それが機能する限り、私はそれがずさんで悪い習慣であっても大丈夫です。

2)コントローラーを作成し、ここからのすべてのビューをまとめるすべてのクエリをやり直します。index.php

  • これは私の快適ゾーンから少し外れていますが、おそらくベストプラクティスと考えられていますか?

このサイトは非常に古く、まとめが不十分です(数千行のカスタム(非OOP)phpと多くのコード重複)さらに言えば、実際には2つの異なるサイトが1つのデータベースを共有し、ほとんどのコードベース(2番目は元のコードベースのコピーアンドペーストで少し前に作成され、その後バラバラになりました)


私の質問

  • これらの実行可能なオプションはありますか、そして私は他の選択肢を逃しましたか?

  • どのアプローチを取るべきですか?

4

1 に答える 1

2

.htaccessファイルの実際の生成は問題になりません。つまり、ファイルに500行または1000行のテキストを書き込むことは、それほど大したことではありません。ただし、エンジンはHTTPリクエストごとにリクエストされたURLをそれぞれに対してチェックするため、多数のルールが実際にはパフォーマンスに大きな影響を与える可能性があります。おそらくそれほど大きなパフォーマンスヒットではありませんが、私には無駄に思えます。Apache、AFAIKは、.htaccess書き換えルールまたはリダイレクトを最適化しないことに注意してください。つまり、小さな正規表現から大きな正規表現を構築することはありません。

オプション2、PHPでリクエストを解析することは、特に巨大な非OOPサイトでは、実際にはそれほど手間がかからないと思います。

次のようなスニペットを考えてみましょう。

$uri = explode('/', $_SERVER['REQUEST_URI']);
if($uri[0] == 'about') {
    $id_aray = lookup_building_and_apartment_by_name( $uri[1], $uri[2] );
    $_GET['building_id'] = $id_array['building'];
    $_GET['apartment_id'] = $id_array['apartment'];
    include('about.php');
} 
else if($uri[0] == 'something_else') {
    // something else.
}
else {
    // 404
}

このようなロジックは、コントローラーとして完全に機能しますが、それほど大きな作業ではありません。

または、すべてのエントリポイントの上部にURIパーサースニペットを配置することもできます。たとえば、about.phpの上部にあります。

$uri = explode('/', $_SERVER['REQUEST_URI']);
$id_aray = lookup_building_and_apartment_by_name( $uri[1], $uri[2] );
$_GET['building_id'] = $id_array['building'];
$_GET['apartment_id'] = $id_array['apartment'];

これにより、一度に1つのサブページで段階的に作業できるようになり、古いリンクも引き続き機能します。


主に記録のために:オプション3があり、次のようにmod_rewriteルールでキャプチャグループを使用できます。

RewriteRule ^/about/([^/]+)/([^/]+)$ about.php?building_name=$1&apt_name=$2 [NC,L]
RewriteRule ^/about/([^/]+)$ about.php?building_name=$1 [NC,L]

(これは単一のルールで実行できますが、このように読み書きする方がかなり簡単です。)これでもabout.phpにphpベースの翻訳が必要ですが、これらのルールを自分のルールに入れることができるという利点があります。 httpd.conf。

オプション4:RewriteMapもあります。これは素晴らしく強力なツールであり、Apacheマニュアルの簡潔さに対処できれば、それはあなたにぴったりのツールかもしれません。使い方を学ぶには、PHPベースのソリューションを使用するよりもかなり時間がかかる可能性がありますが、知っておくとよいことです。効率的なソリューションであり、非常にエレガントです。

テキストベースのマッピングを簡単に生成してから、次のようにRewriteRuleでマッピングを使用できます。

RewriteMap building_map txt:/etc/apache2/buildings.txt
RewriteRule ^/about/([^/]+)$ about.php?building-id=${building_map:$1|0} [NC,L]
于 2012-12-03T20:02:28.363 に答える