22

次の内容の.htaccessファイルがあります。

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(.*)$ entryPoint.php [QSA]
</IfModule>

これで、すべてのリクエストをファイルにリダイレクトして、entryPoint.phpそれらを調べることができるようにします。

  • 拡張機能がない場合は、モジュールである必要があります
  • .phpがある場合、それはハッキングです
  • .pngの場合は、「安全な」呼び出しです。

    画像の場合、私はヘッダーとfile_get_contents()そのコンテンツを出力していました。直接読み取りを残すよりも少し遅いことがわかりました。

私の質問は:

entryPoint.php画像への参照がある場合にこの.htaccessが呼び出されないようにするにはどうすればよいですか?

私がすでに持っているコードに関する追加のフィードバックは大歓迎です!

4

3 に答える 3

45

私が理解しているように、あなたはすべての非画像を処理したいので、あなたのphpファイルを投げました。右?

もしそうなら、ここにあなたが必要なものがあります:

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond %{REQUEST_URI}  !(\.png|\.jpg|\.gif|\.jpeg|\.bmp)$
RewriteRule (.*)  entryPoint.php [QSA]

</IfModule>

必要な画像拡張子を削除するために追加することを忘れないでください!誤解した場合は、正解を教えてください!

于 2011-08-15T01:33:31.423 に答える
9

このようなものを使用して、画像の書き換えを停止できます

RewriteRule \.(jpg|png)$ - [L]

このルールは、「要求されたファイルがピリオドの後に「jpg」または「png」が続く場合は、それを書き換えないでください」と述べています。

$文字は「文字列/ファイル名の終わり」をマークするだけで、「この-ルールが一致する場合はURLを書き換えない」と言い、「これが一致する[L]場合はこれ以上ルールを処理しない」という意味です。

この種のことを処理する通常の方法は、「このファイルが存在する場合はファイルを直接提供するだけで、存在しないものはすべてPHPによって処理される」という包括的なステートメントを適用することです。このタイプのルールは次のようになります。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]

これは、「リクエストが存在するファイルまたはディレクトリに対するものでない場合は、「request」というクエリ文字列パラメータとして渡された元のパスを使用してリクエストをindex.phpに渡し、他のクエリ文字列パラメータを新しいリクエストに追加します。 「」

于 2011-08-15T01:32:30.870 に答える
7
RewriteCond %{REQUEST_FILENAME} !\.(png|jpg|gif)$

この行をあなたの直前に置いてくださいRewriteRule

于 2011-08-15T01:30:13.453 に答える