1

特定のパスを除くすべての場合に、Apache で mod_headers を使用してヘッダーを設定しようとしています。以下の 3 つのバリエーションをそれぞれ試してみましたが、パスを除外するために適切に機能しているようには見えません。すべてのケースで、例のパスに一致するものを含むすべてのリクエストのヘッダーを取得します。例: http://example.com/charts/24_hour_commodity/450/300

<VirtualHost *:8200>
...
    SetEnvIfNoCase Request_URI "^/charts/.*" frameallow
    Header set X-Frame-Options SAMEORIGIN env=!frameallow
...
</VirtualHost>

または:

<VirtualHost *:8200>
...
    Header always set X-Frame-Options SAMEORIGIN
    <LocationMatch "^/charts">
        Header always unset X-Frame-Options
    </LocationMatch>
...
</VirtualHost>

または

<VirtualHost *:8200>
...
    Header always set X-Frame-Options SAMEORIGIN
    <Directory "/full/path/to/charts">
        Header always unset X-Frame-Options
    </Directory>
...
</VirtualHost>

#tried both with and without the 'always' in all configs

最初の例でヘッダーが設定されている理由、または次の2つの例でヘッダーが設定解除されていない理由を理解するのを手伝ってくれる人はいますか? 1つの実用的なソリューションで十分です...

更新: Apache サイトでの処理の順序について読んだ後、代わりに条件付きブロックを使用してみました。どちらも機能しません:

<If "%{REQUEST_URI} =~ m#^/charts#">
    Header unset X-Frame-Options
</If>

または

SetEnvIfNoCase Request_URI "^/charts" frameallow
<If "reqenv('frameallow') == 1">
    Header unset X-Frame-Options
</If>

だから、まだ壊れています。処理中の特定のポイントの後に、Header ステートメントが起動しないことに関する何かである必要があります。または、メインのものよりも前に条件付きで発火し、オーバーライドされているもの。ただし、根本原因までデバッグする方法が見つかりません。

4

1 に答える 1