私はそれを考え出した。私の元のコードはかなり近いものでした。修正バージョンは次のとおりです。
更新:これは404エラーを正しく表示するバージョンです(以下のバージョンはmysite.com/mydirectory.imgをディレクトリにリダイレクトしますが、これは奇妙な動作です)
RewriteCond %{REQUEST_URI} !.*\.img [OR]
RewriteCond /var/www/html%{REQUEST_URI} -f
RewriteRule ^ - [S=4]
RewriteRule ^/?(.*)\.img$ /$1
RewriteCond /var/www/html%{REQUEST_FILENAME}.png -f
RewriteRule ^ /var/www/html%{REQUEST_FILENAME}.png [L,S=2,T=image/png]
RewriteCond /var/www/html%{REQUEST_FILENAME}.jpg -f
RewriteRule ^ /var/www/html%{REQUEST_FILENAME}.jpg [L,S=1,T=image/jpeg]
RewriteRule ^ - [R=404]
元の解決策(404チェックなし):
RewriteCond %{REQUEST_URI} !.*\.img [OR]
RewriteCond /var/www/html%{REQUEST_URI} -f
RewriteRule ^ - [S=3]
RewriteRule ^/?(.*)\.img$ /$1
RewriteCond /var/www/html%{REQUEST_FILENAME}.png -f
RewriteRule ^ /var/www/html%{REQUEST_FILENAME}.png [S=1,T=image/png]
RewriteCond /var/www/html%{REQUEST_FILENAME}.jpg -f
RewriteRule ^ /var/www/html%{REQUEST_FILENAME}.jpg [T=image/jpeg]
注意すべき点は次のとおりです。
- ファイルチェックにルートフォルダを追加しました。
${REQUEST_FILENAME}
開始は単純にに設定されているようで%{REQUEST_URI}
、最初の書き換えは変更されませんが、%{REQUEST_URI}
変更されますが、URI形式のままになります。${REQUEST_FILENAME}
- に変更
$0
しました%{REQUEST_FILENAME}
。何$0
が設定されているかはわかりませんが(正規表現を含む空の文字列である可能性があります^
)、変更するまで403Forbiddenエラーが発生していました。
それが他の誰かを助ける場合に備えて、私は次の行でそれをデバッグしました:
RewriteRule ^ /debug?u=%{REQUEST_URI}&f=%{REQUEST_FILENAME} [R]
これは、変数をクエリ文字列の形式でブラウザに送信します。
だからそれは動作します。これらのことをたくさん書き、ほとんどのドキュメントを読んだにもかかわらず、mod_rewriteがどのルールをいつどの入力で実行するかをどのように決定するのかまだわかりません…</ p>