1

画像などの既存のファイルはサーバーによって直接処理される必要があるため、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

うまくいくようです。

4

2 に答える 2

1

2 回目のチェック (ファイルが存在する場合) のみを行い、存在しない場合は常に index.php にリダイレクトします。

そこで、製品などのチェックを行って使用できます

header('HTTP/1.0 404 Not Found');
include('404.html');                  // <----- this is your 404 file
exit();

404 エラーを生成する場合。

于 2013-09-10T19:40:43.430 に答える
0

これが私の.htaccessファイルでのやり方です

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1
于 2013-09-10T19:27:08.797 に答える