米Godaddy の Shared Linux Hostingで PATH_INFO を必要とするPHPスクリプトを動かす方法。

  • Godaddyの担当者を今すぐLANケーブルで首吊らせたいです。マジで。

PATH_INFOやらAcceptPathInfoが徹底的に無効化されているGoDaddyでPATH_INFOを使う方法です。

  1. .htaccess に以下の追記をする。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,E=PATH_INFO:$1]
</IfModule>
  • いわずとしれた、存在しないファイルを index.php にリダイレクトするRewriteRuleです。
  • ミソはフラグで、
    • QSA - クエリ部分を末尾に追記する
    • E=PATH_INFO:$1 - $1 に該当する部分を環境変数 REDIRECT_PATH_INFO に代入する。

あとはスクリプト側で以下をやるだけです。

if (isset($_SERVER['REDIRECT_PATH_INFO'])) {
        $_SERVER['PATH_INFO'] = $_SERVER['REDIRECT_PATH_INFO'];
}

Concrete5 CMSをGodaddyで使いたいときには以下もやってしまいましょう。

define('URL_REWRITING_ALL', TRUE);
ob_start('ob_index_handler');

function ob_index_handler($source) {
        $source = str_replace('index.php/', '', $source);
        return $source;
}

これを見つけるのに時間がかかりすぎたので現在 絶賛徹夜で残業中。