Zend_Cache_Backend_Staticを使用して静的ページキャッシュを設定し、アプリケーションでキャッシュされたhtmlファイルを提供しました。これはうまく機能しています。私が抱えている唯一の懸念は、$_GETパラメータを使用してファイルをキャッシュする方法にあります。提供されたURLルートにマップするフォルダー構造が自動的に作成されるため、これは、多数の$ _GETパラメーターが既存のページに意図的に追加される可能性がある場合の潜在的なセキュリティリスクですか?ディレクトリの最大深度またはファイルの最大長に達しましたか?
例:現時点では、ページをキャッシュしている/public/cache/static/
ので、標準のルーター/module/controller/action/param1/val1/param2/val2
または標準のクエリ文字列/module/controller/action?param1=val1¶m2=val2
を使用すると、次のディレクトリ構造が作成されます。
/public/cache/static/module/controller/action/param1/val1/param2/val2.html
/public/cache/static/module/controller/action?param1=val1¶m2=val2.html
この方法でディレクトリ構造を作成するためのアクセスを人々に許可することは(ただし制限されますが)、私は少し心配します。Zend_Cache_Backend_Staticと対応するZend_Cache_Frontend_Captureの両方を、Zend_Cacheファクトリ経由ではなくiniファイルで設定する必要があり、セットアップオプションがないように見えます。
デフォルトルーターを$_GET変数の数を制限するカスタムルートに置き換える場合だけでしょうか?これは可能ですか、それとも各ルートに必要な変数を正確に指定する必要がありますか(世界の終わりではなく、もう少し制限があります)
アップデート:
したがって、静的キャッシュを処理するための既存の書き換えルールは次のとおりです。
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{DOCUMENT_ROOT}/cached/index.html -f
RewriteRule ^/*$ cached/index.html [L]
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}\.html -f
RewriteRule .* cached/%{REQUEST_URI}\.html [L]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
リクエストが静的キャッシュのページにヒットすると、そのhtmlページが送信されます。そうでない場合は、ZendFrameworkにヒットして生成されます。
私は最初に以下を追加することができます:
RewriteCond %{QUERY_STRING} \S
RewriteRule [^\?]+ /$0? [R=301,L]
これにより、クエリ文字列が完全に消去されます。Zend FrameworkのURLパスメソッドを使用して$_GET変数を渡すことができるので、これは問題ありません(これは、非常に明示的なルートを提供することによっても制限されています)。しかし、リダイレクトせずにこれを行うことは可能ですか?