読者です 読者をやめる 読者になる 読者になる

特定のIPの場合のみ違うContent-Typeで実行する方法

結論は、うまくいかなかったので、IP制限とあわせ技ですが。
もし、もっといい方法があったら教えてください。


要件

  • 特定のIPのみContent-Typeを変更する
    • xxx.xxx.xxx.xxx は application/xhtml+xml
    • それ以外は、text/html
  • 対象ファイルは、index.html
  • 出来れば同一ファイルで。無理なら別ファイルでも可
  • 下位階層も考慮する
  • phpなどのプログラムは使用できない


まず、Content-Typeを設定する方法。

AddType application/xhtml+xml .html


次に、特定ファイルのみ設定する方法。

<Files index.html>
AddType application/xhtml+xml .html
</Files>


これを、.htaccessでやっていたが、下位階層のindex.htmlにまで影響が出てしまう。
そこで、httpd.confで、 ディレクティブにて指定したが、やはり下位階層にまで影響が出てしまう。


Content-Typeを、mod_headerでやってみようとしたりとか、いろいろ試したがいまいちうまく動かないので、そもそもファイルを分けてしまうことにした。
mod_rewriteが使えるという前提と、index_i.htmlが下位階層に存在しないという前提で。

SetEnvIf Remote_Addr ^xxx\.xxx\.xxx\.xxx$ is_target=yes
#SetEnvIf Remote_Addr ^yyy\.yyy\.yyy\.yyy$ is_target=yes

RewriteEngine On
RewriteBase /

RewriteCond %{ENV:is_target} yes
RewriteRule ^index_i.html$ - [L]

RewriteCond %{ENV:is_target} yes
RewriteRule ^$ index_i.html [L,R=302]

RewriteCond %{ENV:is_target} yes
RewriteRule ^index.html index_i.html [L,R=302]


RewriteCond %{REMOTE_ADDR} ^.*$
RewriteRule ^index_i.html$ index.html [L,R=302]


<Files index_i.html>
AddType application/xhtml+xml .html
</Files>

SetEnvIf形式にしたのは、IP制限が複数の場合に何度も書かなくていいようにです。


使いどころとしては、DoCoMoのxhtmlの場合とかなんですけどね。
もっとスマートな方法ないのかなぁ〜?