.htaccess(ドットエイチティーアクセス)を使ってURLの統一をする方法

サーバー
スポンサーリンク

SEOに効くと言われているURLの統一化を実施したいと思います。

具体的には、以下の事を行います。

  • www無しに統一
  • httpsで統一

リダイレクトをする方法は、meta refrashやphpで書いたりすることもできますが、一番簡単な方法は.htaccessを利用する方法です。

.htaccessは置かれた階層以下全てに適用されます。

スポンサーリンク

.htaccessのリダイレクトで活躍するRewriteCond

RewriteCond は、URL書換えを行うルール条件を指定します。そのためRewriteRuleの前に記述する必要があります。

RewriteRule は RewriteCond のルールを満たした場合に適用されます。

文字だけだとわからないと思うので、実際に書いてみます。

まずはWWWを無しに統一します

www.sample.com/book/2015best.html というURLでアクセスがあった場合に、https:sample.com/book/2015best.htmlというURLにリダイレクトします。

次の記載方法で、実現可能です。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.sample\.com$
RewriteRule ^(.*)$ https://sample.com/$1 [R=301,L]

.htaccessに書いたリダイレクトを解説。

RewriteEngine

RewriteEngine on

Rewrite機能オンにします。これをオンにしないとURLの書き換えができません。
記載は1回でOKです。

RewriteCond

RewriteCond %{環境変数} 条件(正規表現で記述)

RewriteCond では、RewriteRuleを適用する条件を書きます。

環境変数は{}で囲えばOKです。環境変数は様々な種類がありますので、一覧を一番最後に記載しておきます。

正規表現は、とりあえずURLの先頭は^ 末尾は$ .(ピリオド)は\(バックスラッシュ)でエスケープします。

ピリオドをなぜバックスラッシュでエスケープするかというと、正規表現でピリオドは、任意の1文字という意味を持っているからですです。つまり、任意の文字では無く、URLのピリオドと認識させるためです。

あらためて今回のRewriteCondを見ると、ホスト名が、www.sample.com だったら RewriteRule を適用というRewriteCondです。

 

RewriteCondは下記のように続けて複数記載する事が可能です。この場合、AND条件になります。

RewriteCond %{環境変数} 条件
RewriteCond %{環境変数} 条件

又はとったOR条件の場合は以下のようになります。

RewriteCond %{環境変数} 条件 [OR]
RewriteCond %{環境変数} 条件

[OR]以外には、NCというのも存在します。NCは大文字と小文字を区別しなくなります。
ORとNCを両方記述する場合は次のようにカンマでつなげます。[OR,NC]

RewriteRule

RewriteRule パターン(正規表現で記述) 置換URL [フラグ]

RewriteRluleはまず、置換対象になるURLを指定し、その後に置換後のURLを記述します。

置換対象は、個別のURL、特定のディレクトリ以下等、正規表現を利用して指定することが可能です。

上記の置換対象のURL(ドメインよりも後ろのURL)は正規表現で書いてあります。

^先頭 と $末尾 の間に .(ピリオド)と*(アスタリスク)があります。

ピリオドは任意の1文字、アスタリスクは前の文字を0回以上繰返す、という意味になります。

つまり今回は、どのようなURLでも置換対象になります。

ピリオドとアスタリスクを () で囲ってありますが、これはグループ化といいます。
グループ化したものは、置換後のURLにある$1にそのままもってくることが可能です。

フラグにはR これはRedirectの意味で、301をつけているので301リダイレクトになります。

LはLastで、ルールがこれで完了し、その後に続くルールは実行しないことを意味します。

httpできたものをhttpsに301リダイレクト

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://sample.com/$1 [R=301,L]

RewriteCondで 変数名 HTTPS を指定し、HTTPSの状況を取得します。offだった場合の下のRewriteRuleを適用します。

RewriteRule は前述したとおり、何にでもマッチする記述です。

httpsとwww無しで統一するには

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.sample\.com$
RewriteRule ^(.*)$ https://sample.com/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://sample.com/$1 [R=301,L]

変数一覧

情報のタイプ 変数
HTTP headers: HTTP_ACCEPT ブラウザの言語タイプ
HTTP_COOKIE クッキー情報
HTTP_FORWARDED プロキシ情報
HTTP_HOST サーバーのホスト名
HTTP_PROXY_CONNECTION プロキシを経由しているか否か
HTTP_REFERER 参照元URL
HTTP_USER_AGENT ユーザーエージェント
server internals: DOCUMENT_ROOT ドキュメントルートのパス
SERVER_ADDR サーバーのアドレス
SERVER_ADMIN サーバー管理者情報
SERVER_NAME サーバー名
SERVER_PORT サーバーのポート番号
SERVER_PROTOCOL プロトコルバージョン
SERVER_SOFTWARE サーバーソフトウェア
PATH_INFO パス情報
QUERY_STRING クエリ文字列
REMOTE_ADDR リモートアドレス
REMOTE_HOST リモートホスト名
REMOTE_IDENT リモートユーザーのID
REMOTE_USER リモートユーザー名
REQUEST_METHOD リクエストメソッド
SCRIPT_FILENAME スクリプトファイル名
date and time: TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY 曜日 (0:日 ~ 6:土)
TIME 年月日時分秒 (例:20130123123456)
specials: API_VERSION APIバージョン
HTTPS HTTPSでのアクセスか否か
IS_SUBREQ サブリクエストか否か
REMOTE_ADDR リモートアドレス
REQUEST_FILENAME リクエストされたファイル名
REQUEST_SCHEME httpかhttpsを判断
REQUEST_URI リクエストURI
THE_REQUEST リクエスト文字列
参考にさせて頂いたサイト
Apache mod_rewrite Introduction - Apache HTTP Server Version 2.2
正規表現・ワイルドカード
正規表現・ワイルドカードについてまとめてみました。

 

 

 

コメント

タイトルとURLをコピーしました