URLの正規化
PHPPHPでURLの正規化をおこなう方法を解説します。URL正規化のパターンも紹介します。
URL正規化とは?
URL正規化というのは、簡単に言えば「URLを統一すること」です。URLには、異なるURLであっても同じページが表示されるものがあります。例えば以下のような場合です。
・http://hoge.com/
・https://hoge.com/
・http://www.hoge.com/
・http://hoge.com/index.php
このような異なるURLを統一させるのがURL正規化です。もう少し具体的に言うと、1つのURLに統一するために違うURLでアクセスされた場合にはリダイレクトをおこない、統一したいURLに移動させます。
URLを正規化する目的は主に2つあります。
- 非SSL通信をSSL通信にしてセキュリティ面を強化する
- 異なるURLが違うページだと検索エンジンに認識されることを防ぐ
https・wwwなし・index.phpなしに統一
- PHP
- COPY
if(empty($_SERVER["HTTPS"]) || preg_match("/^www\./", $_SERVER['HTTP_HOST']) || preg_match("/index\.php$/", $_SERVER['PHP_SELF'])){
$url = "https://" . preg_replace("/^www\./", "", $_SERVER["HTTP_HOST"]) . preg_replace("/index\.php$/", "", $_SERVER["PHP_SELF"]) . (!empty($_SERVER['QUERY_STRING']) ? "?".$_SERVER['QUERY_STRING']);
header("Location: ".$url, true, 301);
exit;
}
https・wwwあり・index.phpなしに統一
- PHP
- COPY
if(empty($_SERVER["HTTPS"]) || !preg_match("/^www\./", $_SERVER['HTTP_HOST']) || preg_match("/index\.php$/", $_SERVER['PHP_SELF'])){
$url = "https://" . (!preg_match("/^www\./", $_SERVER['HTTP_HOST']) ? "www.") . $_SERVER['HTTP_HOST'] . preg_replace("/index\.php$/", "", $_SERVER["PHP_SELF"]) . (!empty($_SERVER['QUERY_STRING']) ? "?".$_SERVER['QUERY_STRING']);
header("Location: ".$url, true, 301);
exit;
}