画像などの既存のファイルはサーバーによって直接処理される必要があるため、URL が既存のファイルにつながる場合を除き、すべての URL を単一の php ファイルに書き直そうとします。しかし、誰かがファイルのように見える URL を使用し、このファイルが存在しない場合、404 を取得する必要があります。
次の .htaccess ファイルを思いつきました。これは有効なアプローチですか?今週の金曜日に実稼働サーバーに配置されるため、セキュリティ上のリスクがないこと、または何らかの悪い慣行であることを確認したいと思います.
最初のルールは、ファイルが要求されている場合のように見えるすべての URL が 404 を取得することを確認する必要があります (もちろん、ファイルが存在しない場合のみ)。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.([-A-z0-9]+)$ - [R=404,L]
上記が一致しない場合、他のすべての存在しないファイルを index.php (/products/23 など) に書き換える 2 番目のルールがあります。この場合、index.php が残りのルートを処理します。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php [L]
一致するルールがない場合は、既存のファイルが見つかり、既存の画像やスクリプトと同様に、Apache によって直接提供されることを意味します。
これは有効なアプローチですか?ありがとう。
編集:
同様の結果をもたらすわずかに短いアプローチ:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.([-A-z0-9]+)$ - [R=404,L]
FallbackResource /index.php
うまくいくようです。