0

セルフルーティング用のmod_writeルールを作成する方法はいくつかあります。現在、私はこれを使用しています:

RewriteCond %{REQUEST_URI} !\.(js|ico|gif|jpg|png|css)$
RewriteRule ^.*$ index.php [NC,L]

しかし、私も使用できます

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php

また

ErrorDocument 404 /index.php

もっとたくさんあるかもしれません。

これらの例の1つを使用することの欠点はありますか?

一方のルールがもう一方のルールよりも理にかなっているユースケースはありますか?

これらのルールの違いを詳しく説明していただけますか?

あなたの時間と助けのためのThx。

4

2 に答える 2

2

あなたの状態が次の場合:

RewriteCond %{REQUEST_URI} !\.(js|ico|gif|jpg|png|css)$

次に、画像、アイコン、スタイル、およびJavaScriptのみがルーティングから除外されます。これは、静的なhtml、ディレクトリ、またはディレクトリインデックスにアクセスできないことを意味します。したがって、静的なhtmlページをどこかに配置し、index.phpを経由せずに提供したい場合。また、誤って画像、スクリプト、またはスタイルを間違った場所に配置してアクセスしようとすると(通常は404が表示されます)、index.phpを介してルーティングされず、デフォルトの404エラーが発生します。ページ。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

これらの条件は、既存のリソースを指すURIを除外します。したがって、画像、スクリプト、ディレクトリ、静的htmlなどをドキュメントルートの任意の場所にプロットすると、index.phpを経由せずにそこに移動できます。RewriteCond %{REQUEST_FILENAME} !-sシンボリックリンクを指すURIを除外する条件も含まれる場合があります。これは通常、ルーティングを行うときに表示されるものであり、wordpressはこれを使用します。

ErrorDocument 404 /index.php

これは、mod_rewriteの外部で実行され、将来または必要に応じて追加の条件を課す方法がないことを除いて、基本的に前の条件と同じことを実行します。mod_rewriteの外部でルーティングを行うことの欠点は、mod_rewriteとコアディレクティブ(この場合はErrorDocument)がURIファイルマッピングパイプラインの異なる時間にURIで処理を行うことです。したがって、他のことを行うルールがある場合、それらは適用され、2つのディレクティブが互いに競合しているため、最終的にはindex.phpを介してルーティングされる可能性があります。書き換えルールがパイプラインのある時点で適用されるからといって、他のディレクティブがパイプラインの後半で適用されないという意味ではありません。これはルーティングを行うための悪い方法です。

次のようなものもあります:

RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^.*$ index.php [L]

これは盲目的にすべてをルーティングします。javascript、画像、静的html、すべて。時々これは人々が望むものです。最終的に、これはあなたが望むものとあなたのindex.phpスクリプトが何をするかに依存するでしょう。404を処理しますか?(最初のルーティングルールで必要なもののように)、非静的リソースを処理するだけですか?(2番目のルールが行うことのように)、またはそれは文字通りすべてをキャッチし、すべてを実行します(上記のルールが行うこと)?

また、書き換えフラグは最初のルールと2番目のルールで異なることに注意してください。他のルールがある場合、これらは重要です。

于 2012-09-24T19:50:42.787 に答える
0

最初の例(使用すると言う例)の最大の欠点は、このメソッドが、index.phpへの書き換えから除外されるファイル拡張子(.js .ico .gif .pnd)をハードコーディングすることです。これに伴う問題は、除外リストにないファイル拡張子を使用する新しい静的コンテンツを追加する必要がある場合、それに応じて書き換えルールを変更する必要があることです。たとえば、フラッシュコンテンツのホスティングを開始し、.swfファイルと.flvファイルをホストする必要がある場合は、既存のrewritecondルールを更新する必要があります。

真ん中のソリューションが最適です(IMHO)。つまり、要求されたファイルが存在しない場合(!-f条件)OR、要求されたディレクトリが存在しない場合(!-d条件)、要求を書き換えます。にindex.php

于 2012-09-24T19:46:34.103 に答える