1

わかりました、これが可能かどうか疑問に思い始めています。私は htaccess のチュートリアルと例に注いでいますが、正しく機能していないようです。

友人の Web サイトのディレクトリで実行される動的画像を作成するスクリプトがあります。/ にアクセスできますが、実際に使用しているディレクトリは /mydir/ にあります。画像を表示するために、PHP 経由で png に出力されます。要求されたファイル名を取得して PHP スクリプトを実行するために、次のRewriteRuleセットアップがあります。各ファイル名は、display.php スクリプトで使用されるシリアル化されたオブジェクトを含む個別のファイルを表します

RewriteRule ^(.*)\.jpg$ display.php?file=$1

その部分は正常に機能していますが、誰かが存在しないファイルを要求すると、スクリプトが呼び出されても使用するオブジェクトがないため、PHP エラーがスローされます。

私が今やろうとしていて、完全に失敗しているのは、ファイルが ./Cache/ ディレクトリに存在するかどうかを確認し、通常どおりスクリプトを実行し、そうでない場合はサーバーが標準の 404 をスローすることです。

私は次のようなことを試しました

RewriteCond %{REQUEST_URI} ^(.*)\.jpg$
RewriteCond %{DOCUMENT ROOT}/img/Cache/%1.jpg -f

これを処理するための適切な変数と正規表現が思いつかないので、皆さんに助けを求めています。最大の問題は、これらの各変数に実際に何が入っているかがわからないため、どこが間違っているかがわかります。私はある種の var_dump() を殺します。

4

2 に答える 2

1

次のルールを使用します。

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/mydir/img/Cache/$1.jpg -f
RewriteRule ^(.*)\.jpg$ display.php?file=$1 [L]
  1. /mydir/imgこれは、フォルダー内の .htaccess ファイルに配置する必要があります

  2. このフォルダを別の場所に移動したり、親フォルダの名前を変更した場合は、同様に更新する必要がありますRewriteCond


より柔軟な (親フォルダー名を指定する必要がない) このアプローチを試すことができますが、これがあなたのセットアップで機能することを保証することはできません (ただし、私の PC では機能します)。

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} ^(.*)/([^/]+)\.jpg$
RewriteCond %1/Cache/%2.jpg -f
RewriteRule ^(.*)\.jpg display.php?file=$1 [L]

ここで、現在の物理フォルダーは、要求された URL から自動的に決定されます。ただし、シンボリック リンクやその他の設定がある場合は、正しくない結果が生じる可能性があります。さらに、条件がもう 1 つあり、少し遅くなります (チェックする正規表現が 1 つ増えます)。

于 2011-07-11T18:01:18.993 に答える
0

PHPファイルを使用して確認します。

PHP で使用file_existsし、存在しない場合は、header("HTTP/1.0 404 Not Found");またはheader('Location404 イメージを使用します。

于 2011-07-11T08:04:05.280 に答える