- ベストアンサー
PHPでmod_rewriteによるURL書き換えがうまくいかない問題
- PHPで書かれたコードで、mod_rewriteによるURL書き換えがうまくいかない問題が発生しています。
- 特定のURLにアクセスされた際に、別のURLにリダイレクトさせる処理が書かれていますが、URLが書き換わらず、空白のページが表示されてしまいます。
- 原因は、HTTP_HOSTとREQUEST_URIの取得方法にあり、正規表現のパターンマッチングが誤っている可能性があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
そもそも、URL の書き換えがうまくいっていますか? 下のコードのように、書き換えた URL を表示してみて、それがうまくいって いるのなら、リダイレクトするようにしてみれば良いのではないでしょうか。 正しい URL が得られているのにリダイレクトできないのなら、サーバの問題 かもしれません。 ちなみに、私の環境では preg_match_all の結果を代入した配列は、 ・$matches_HTTP_HOST[0][0]: 1 番目にパターン マッチしたパターン全体 ・$matches_HTTP_HOST[1][0]: 1 番目にパターン マッチしたサブ パターン 1 ・$matches_HTTP_HOST[2][0]: 1 番目にパターン マッチしたサブ パターン 2 ・(以下略) となるようです。 daisuke_dm さんが掲載したコードにはいくつか文法ミスがありますが (ダブル クオーテーションが全角、header が hearder になっているなど) そのへんは大丈夫なのでしょうか? 私が掲載したコードは読みやすくするためにタブを全角スペースに置き換えて います。 <html> <?php if ($_SERVER["REQUEST_METHOD"] == "GET"){ #HTTP_HOST (exclude www.) preg_match_all("/^(www\.)(.*)$/", $_SERVER["HTTP_HOST"],$matches_HTTP_HOST); if ($matches_HTTP_HOST[1][0] != ''){ echo $matches_HTTP_HOST[0][0]; echo "<br>"; echo $matches_HTTP_HOST[1][0]; echo "<br>"; echo $matches_HTTP_HOST[2][0]; echo "<br>"; } # URL の書き換えがうまくいっているのなら、以下のコメントを外して # リダイレクトする。 #header("HTTP/1.1 301 Moved Permanently"); #header("Location: ".$matches_HTTP_HOST[2][0]); #header("Connection: close"); } ?> </html>