2

のような個々のページの URL を持つサイトを非常に多く見ます。

http://www.mysite.com/articles/this-is-article-1 http://www.mysite.com/galleries/575

そして、リダイレクトせず、ゆっくりと実行しません...

私は URL を解析する方法を知っています。それは簡単です。しかし、私の考えでは、それは動的なサイトでは遅くて扱いにくいようです. 同様に、ページがすべて静的に構築されている場合 (カスタム URL を参照)、それはページのすべてのコンポーネントも静的であることを意味します... (これは悪いことです)

これが通常どのように達成されるかについて、いくつかのアイデアを聞きたいです。

4

9 に答える 9

3

上記を処理する方法はたくさんあります。一般的に言えば、少なくともなんらかの形式のリダイレクションが常に関係していますが、それは php ではなく .htaccess レベルである可能性があります。シナリオは次のとおりです。

  1. .htaccess を使用して、php 処理スクリプトにリダイレクトします。

  2. uri ($_SERVER['REQUEST_URI']) を解析し、コンテンツの種類 (たとえば、記事やギャラリーなど) を確認します。

  3. 提供されたID(通常、例のようにURIの最後に追加されます)を使用して、静的ファイルを提供するか、要求されたコンテンツをデータベースに照会して、正しいデータを取得します。

この方法は SEO を向上させるための非常に一般的な方法ですが、あなたが正しく強調しているように、このアプローチを採用することには困難がある可能性があります。通常、パフォーマンスは向上しませんが、開発や管理がより面倒になる可能性があります (実装がよく考えられておらず、スケーラブル)。

于 2009-01-04T18:50:48.380 に答える
2

まず、アプリケーション レベルでの /plain/ URL 書き換えと、/plain/ CGI (CGI は PHP、ISAPI、ASP.NET など) を使用して静的ページを提供する方法を比較すると、静的ファイルを提供する方が常に有利です。単純に仕事が減ります。たとえば、Windows と Linux (私が知っている) では、HTTP 経由でローカル ドライブ上の静的ファイルを提供するためのカーネルの機能拡張さえあります。要点をさらに明確にするために、いくつかのサーバーと OS を使用したベンチマークを見つけました: http://www.litespeedtech.com/web-server-performance-comparison-litespeed-2.0-vs.html#RESULTどのタイプの CGI を使用するよりも高速

ただし、書き換えられた URL を効果的に使用することで、パフォーマンスとスケーラビリティが向上する可能性があり、それはキャッシュによって行われます。適切なキャッシュ ヘッダーを返すと ( HTTP ドキュメントの cache-control ディレクティブを参照)、ダウンストリーム サーバーがデータをキャッシュできるようになるため、サイトでヒットすることさえありません。ただし、静的ページでも同じメリットが得られると思います :) たまたま、このトピックに関する記事を 1、2 日前に High Scalability ブログで読みました: http://highscalability.com/strategy-understanding-your -データリード-最高のスケーラビリティ-ソリューション

于 2009-01-04T19:20:47.727 に答える
1

これは通常、サーバー (Apache の mod_rewrite など) または Web アプリケーション (指定されたパスのルートを探す Web アプリケーションにすべての要求がルーティングされる) のいずれかで、書き換えエンジンを介して行われます。

于 2009-01-04T18:48:19.930 に答える
1

書き換えエンジンは高速で最適化されているため、最良のアプローチです。サーバー側のスクリプトで単純なローカル変数のみを使用できるようにします。

Apache の mod_rewrite が最も一般的です。

于 2009-01-04T18:56:45.700 に答える
0

Apacheサーバーでは、mod_rewriteが最も一般的です。これは、リクエストURLを正規表現を使用して他のURLに書き換えることができるapache modであるため、例として次のようなものが使用されます。

RewriteEngine ON
RewriteRule ^ articles /(。*)articles.php?article = $ 1 [L]
RewriteRule ^ galleries /(\ d *)galleries.php?gallerie = $ 1 [L]

これはほとんどいつでも費用がかかりません、そして実際にはURLを持っているのと同じくらい速いです:
www.mysite.com/galleries.php?gallerie=575しかしずっと良く見えます

于 2009-01-04T23:25:09.637 に答える
0

非常に簡単な方法は、CGIにURLのPATH_INFO部分を解析させることです。あなたの例では:

http://www.example.com/articles/12345 (where "articles" is a CGI script)
                       ^CGI^   ^^^^^^PATH_INFO

スクリプト名の後のすべてのものは、PATH_INFOCGIヘッダーでスクリプトに渡されます。

次に、データベースルックアップまたはページを生成したいものを実行できます。

IISサーバーとApacheサーバーはURLの異なる部分をPATH_INFOに配置するため、この値にアクセスするときは注意してください。(IIRC:IISはURL全体を誤って使用し、Apacheは上記のようにURLを削除します。)

于 2009-01-04T20:01:59.500 に答える
0

私の場合、この機能がすでに組み込まれている Web フレームワークに固執しています。(コードイグナイター)

... 同様に、ページがすべて静的に構築されている場合 (カスタム URL を参照)、それはページのすべてのコンポーネントも静的であることを意味します... (これは悪いことです)

...はい、これは確かに非常に悪いです。:o

于 2009-01-04T19:01:50.603 に答える
0

で書き換え可能

  1. .htaccess ファイルまたは httpd.conf または vhosts.conf ファイルのサーバー レベル。これは通常、アプリケーション レベルで行われる次のレベルの書き換えよりも高速です。

  2. アプリケーション レベル (この例では PHP を使用)。URL を分析し、それに基づいて何らかの方法でリダイレクトするカスタム リダイレクトを作成できます。Zend Framework (ZF) などの最新の Web フレームワークは、ルートを使用して URL の書き換えを制御します。以下は、ZF を使用したスタティック ルートの例です。

$route = new Zend_Controller_Router_Route_Static('latest/news/this/week', array('controller' => 'news'));

これにより、 http://somedomain.com/lastest/news/this/weekからのリクエストがニュース コントローラーにリダイレクトされます。

動的ルートの例は次のとおりです。

$route = new Zend_Controller_Router_Route('galleries/:id', array('controller' => 'gallery'));

変数 $id がそのコントローラーで使用できる場所 (上記の例を使用すると、575 になります)

これらは非常に便利なツールで、アプリケーションを開発し、遡って URL を任意のものに変更できます。

于 2009-01-04T19:06:46.443 に答える
0

私はこの方法を以前から使用しています - 正規表現でリダイレクトされるべきではないファイル拡張子を追加するだけで、他のすべてはphpによって処理されるため、.htaccesファイルに入る必要はありません

URLで成功する

于 2009-01-05T13:11:45.863 に答える