新人PGの学び

プログラマーの卵のlog

RewriteRuleの条件を設定

.htaccess にてリダイレクトの設定

■内容

【www.XXX.info】ドメインか、【XXX.info】ドメインでアクセスした場合、
全て【http://XXX.info】に遷移する
※画像なども含めて表示

■修正箇所

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.XXX\.info)(:80)? [OR,NC]
RewriteCond %{HTTP_HOST} ^XXX\.info [NC]
RewriteCond %{REQUEST_URI} !(^/$)
RewriteCond %{REQUEST_URI} !(^/image/)
RewriteRule ^(.*) http://XXX.info [R=301,L]


※最終行は必ず改行

■修正の意味

#URLの書き換え開始
RewriteEngine on


#80ポートの指定有無関係なく転送元ドメイン、またはからアクセスがあった場合は、転送ドメインに遷移
RewriteCond %{HTTP_HOST} ^(www\.【転送元ドメイン】\.info)(:80)? [OR,NC]
RewriteCond %{HTTP_HOST} ^【転送元ドメイン】[NC]


#無限ループさせないように「トップページではない場合」


RewriteCond %{REQUEST_URI} !(^/$) 


#一部のディレクトリを許可したい場合
※「image」ディレクトリを許可する場合
RewriteCond %{REQUEST_URI} !(^/image/)
RewriteRule ^(.*) 【転送先ドメイン】 [R=301,L]


■その他詳細

・[NC]・・・RewriteCondの大文字小文字を関係なしを条件とするオプション
※([]で記載されるものは、全てオプション)


・[OR]・・・ いずれかのRewriteCondにあてはまる場合に適用
※[OR]を明示しない場合、自動でANDになる。
※[OR, NC]とスペースをするとエラーになるため不要


・「RewriteRule A B 」・・・ユーザーからリクエストのあったURLが「A」の場合、「B」のURLへリダイレクトされる


・^(.*)・・・”任意文字の連続” の正規表現


・[R=301,L]・・・301へリダイレクトした場合、それ以降処理なし
※[R]は、RedirectのRで、301を指定しない場合(「R」のみの場合)は、302リダイレクトになる


※[L]は、LastのLで、RewriteRuleの条件にマッチした場合、以降のRewriteRuleを処理しない


・%{HTTP_HOST}・・・ホストを限定してるのは、開発環境で無効化するため