拡張子 html で PHP を動作させるために .htaccess で設定をしていたのだが,OS を更新したタイミングで動作しなくなってしまった。そして,設定変更をすると文字化けするようになってしまった。
拡張子を php ではなく,html のままで PHP を動作させるには,サイトのルートディレクトリに .htaccess を設置し,適切なディレクティブを記述してやればよい。以前,このサイトではその設定に付随した副作用で文字化けが発生してしまった (nlog(n): 文字化けを直すとPHPが動作しなくなる)。その問題は解決したのだが (nlog(n): 拡張子 html で PHP を動作させているときの文字化け問題が解決),このほど OS をアップグレードしたところ PHP が動作しなくなってしまった。そこで .htaccess の記述を変更したところ,またもや文字化けが発生するようになってしまったのである。
EUC-JP のファイルがあるルートディレクトリに設置した .htaccess
UTF-8 のファイルがあるディレクトリの .htaccess
上の設定で動作していた。
しかし,上の設定をそのままに,OS をアップグレードしたところ,PHP が html の拡張子で動作しなくなってしまった。動作環境は以下のとおり。
そこで,以前学んだことをもとに,EUC-JP コンテンツを置いているディレクトリの .htaccess を次のように変更した。AddType がダメなら AddHandler とするのである。
PHP は動作するようになったが,文字化けしてしまう。それならばと,次のように記述した。「1つの拡張子に対して2つの AddType は使えない」ので,一方を AddHandler,もう一方を AddType とするのである。
しかし,またしても文字化けしてしまう。
試行錯誤し,問題は解決した。PHP を拡張子 html で動作させるのには AddHandler を使い,文字コードは php_value で指定するという方法である。Apache に PHP モジュールが導入されているときにだけ動作すればよいので,IfModule で囲んでおく。
EUC-JP のファイルがあるディレクトリの .htaccess は次の通り。
そして,UTF-8 のディレクトリでは
としておく。
サーバがどのような文字コードでコンテンツを送出しているのかを確認するには,ターミナルなら telnet でポート 80 を指定するのが一般的だが,Firefox なら Live HTTP headers アドオンが使える。
Posted by n at 2015-01-14 23:14 | Edit | Comments (0) | Trackback(0)
Master Archive Index
Total Entry Count: 1957