web-dev-qa-db-ja.com

PHPによって解析されるSVGファイルのContent-Typeを設定する方法

現在、次のApache httpd confを使用しています。

<FilesMatch "\.svg$">
  SetHandler application/x-httpd-php
</FilesMatch>
AddType image/svg+xml .svg

私が達成しようとしていること:

  • SVGファイル内のPHPスクリプトの解析
  • image/svg+xml MIMEタイプでSVGファイルを提供する

ただし、AddTypeは、SVGファイルに代替ハンドラーを使用するように設定したため、無視されているようです。それらはtext/htmlとして提供されるようになりました。

image/svg+xmlタイプを保持しながら、httpdでSVGファイルのPHPを解析するにはどうすればよいですか?

現在、これを解決するためにheader("Content-type: image/svg+xml");呼び出しをSVGファイルに含めていますが、これをすべてのSVGファイルに挿入するのではなく、グローバルに実行する方法があります。

  • CentOS 6.5
  • Apache 2.2.15
  • PHP 5.3.3
3
Patrickdev

最終的に、SVGファイルのハンドラーをapplication/x-httpd-phpに設定し、Apacheのmod_headersを使用して正しいコンテンツタイプヘッダーを渡しました。

<Files "*.svg">
  SetHandler application/x-httpd-php
  Header set Content-Type "image/svg+xml"
</Files>

https://serverfault.com/questions/348439/how-to-fix-Apache-content-type-for-php-parsed-css でほぼ同じ質問を見つけたとき、これは解決しました。

5
Patrickdev

Apache mod_mime documentation は、SetHandlerAddTypeをオーバーライドすることを示しています。

Mod_mimeはメタデータをファイル名拡張子に関連付けますが、コアサーバーは、特定のコンテナ内のすべてのファイル(<Location><Directory>、または<Files>など)を特定のメタデータに関連付けるために使用されるディレクティブを提供します。これらのディレクティブには、ForceTypeSetHandlerSetInputFilter、およびSetOutputFilterが含まれます。コアディレクティブは、mod_mimeで定義されているファイル名拡張子マッピングをオーバーライドします。

.htaccessで mod_headersのヘッダーディレクティブ を使用して機能させる必要があります。

<FilesMatch "\.svg$">
    SetHandler application/x-httpd-php
    Header set Content-Type "image/svg+xml"
</FilesMatch>
1