メンテナンスページへのリダイレクトについては、下の方の302リダイレクトは最適ではないようなので、下記を参考に設定するようにしてください。
理由として302リダイレクトだとリダイレクト先ページは200番のステータスコードが返り、検索順位が落ちる、メンテナンス後に復帰させるのに再度リダイレクトしてあげないといけないなどの問題があるためだそうです。
詳細はこちら↓
http://web-tan.forum.impressrd.jp/e/2009/06/16/5880
Apacheのconfへの記述の仕方です。.htaccessも下記を参考にしつつ書き換えてください
### Maintenance Alias /maint /var/www/maint ErrorDocument 503 /maint/index.html Header set Retry-After "Fri, 06 Jun 2015 0:00:00 GMT" RewriteEngine on RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.99$ RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.100$ RewriteCond %{REQUEST_URI} !^/maint/index.html RewriteRule ^.*$ /maint/index.html [R=503,L]
NC | 大文字小文字を無視 |
L | 変換打ち切り(確定) |
R | リダイレクト |
R=301 | ドメインの永久移転 ※永久的にリダイレクトさせる場合に使用する。しないとSEOで評価が下がる場合がある |
R=302 | ドメインの一時移転 ※一時的にリダイレクトさせる場合に使用する。しないとSEOで評価が下がる場合がある |
NE | エスケープしない |
OR | OR条件。記述なしでデフォルトAND条件 |
Apacheにて「mod_rewrite」が読み込まれている場合は、Rewriteモジュールにてリダイレクト処理が可能です。
下記記述をhttpd.confに追記してください。
RewriteEngine on RewriteCond %{REQUEST_URI} !^/user_data/maintenance.php$ [NC] RewriteCond %{REQUEST_URI} !^/user_data/img/maintenance/header.jpg$ [NC] RewriteRule ^.*$ /user_data/maintenance.php [R,L] ※RewriteCondにて、リダイレクト処理を除外しています。 最後に[NC]を記述することで、次のルールに処理を渡しています。
httpd.confのDocumentrootの下に以下を追記してください。
<Directory /> Redirect / http://hogehoge.com </Directory> ※「/」がDocumentRoot配下を意味しています。
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.hogehoge\.net [NC] RewriteRule ^(.*)$ http://www.hogehoge.jp/$1 [R=301,L]
例えばトップページで使用していないindex.htmlをindex.phpにリダイレクトさせたい場合、DirectoryIndexにIndex.phpを追加しておき、Apacheのconfファイルに下記を追記することでトップのindex.phpへ統一させることができます。
別の拡張子も同様です。
### Redirect RewriteEngine On RewriteRule ^/index.html$ http://%{HTTP_HOST} [R=301,L]
特定のページのみアクセスを許可する場合で、他ページはリダイレクト処理を実施したい場合は、下記設定にて特定のディレクトリ配下にあるファイルからの処理はすべてリダイレクトを無視する設定をしてください。
RewriteCond %{HTTP_REFERER} !^http://(www\.)?hoge\.com/admin/*.*$ [NC] RewriteCond %{REQUEST_URI} !^/admin/*.*$ [NC]
上記例では、/admin/配下のページへのアクセスを許可する設定にしています。
/admin以外のページにアクセスした場合は全てリダイレクト処理されます。
しかしながら、/adminの直下にあるindex.phpおよびlogin.phpではリダイレクト対象の画像やjsファイルがパスに含まれていました。
httprefererを使用することで、当該ディレクトリ配下のリダイレクト処理を無視することができます。
RewriteEngine On RewriteRule ^/$ http://inamuu.com/ [R=301,L]
トップページへのアクセスのみをリダイレクトさせて、その配下のページについては、アクセスさせたい場合は上記記述でOKです。
RewriteEngine On RewriteCond %{Request_URI} !^/live/mobile/(.*)$ [NC] RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|iPad|Android|BlackBerry|Windows.Phone) [NC] RewriteRule ^/live/(.*)$ /live/mobile/$1 [R,L]
hoge配下に複数ファイルがあって、アクセスURLが/hoge/2013という場合。 RewriteCond の!エクスクラメーションマークにて除外している。 RewriteEngine On RewriteCond %{REQUEST_URI} !/hoge/.+ [NC] RewriteRule ^/hoge /hoge/2013/ [R=301,L]
RewriteEngine On RewriteRule ^/hoge/2013$ /hoge/2013/ [R=301,L]
RewriteEngine on RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.hogehoge\.com RewriteRule ^(.*) http://hogehoge.com$1 [R=301,L] ※R=301は301リダイレクトと呼ばれ、永久移転を表す。
RewriteEngine On RewriteCond %{HTTP_HOST} ^inamuu\.com RewriteCond %{REQUEST_URI} ^/testdir/ RewriteRule ^(.*) http://www.inamuu.com$1 [R=301,L]
# vi /etc/httpd/conf.d/rewrite.conf RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*)?$ https://%{HTTP_HOST}/$1 [L,R]
### httpd.confに記述(80番)80番でhogeにきたらhttpsへリダイレクトする RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteCond %{REQUEST_URI} ^/hoge/.*$ RewriteRule /.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] ### ssl.confに記述(443番)443番でhoge以外にきたらhttpにリダイレクトする RewriteEngine On RewriteCond %{SERVER_PORT} ^443$ RewriteCond %{REQUEST_URI} !^/hoge/ RewriteRule /.*$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} =http RewriteRule ^/(.*)?$ https://%{HTTP_HOST}/$1 [L,R] ※条件としてPoundからヘッダーにhttpという情報が付与されている必要がある
例えば、http://inamuu.com/test01/ から /top/へリダイレクトしたいけど、 /test01/配下のディレクトリは無視させたい場合は、下記の通りに記述すればOK。
RewriteEngine On RewriteCond %{REQUEST_URI} !^/test01/(.+)$ [NC] RewriteRule ^/test01/(.*)$ /top/ [R,L] 「+」をつけることで1文字以上存在すればリダイレクトする。
RewriteEngine On RewriteCond %{QUERY_STRING} it_id=1393347333 RewriteRule ^/item.php http://inamuu.com/yoyaku/index.php? [R=301,L]
備考
query_stringでパラメータを指定すると、リダイレクト後もパラメータを引き継ぐため、リダイレクト後はパラメータを削除したい場合はリダイレクト後のURLの末尾に「?」を追記することで、パラメータ付きURLへのリクエストをパラメータ無しへのURLへリダイレクト可能
参考URL:http://d.hatena.ne.jp/shimooka/20070328/1175047714
RewriteEngine On RewriteCond %{QUERY_STRING} c=list&category_b_pk=1$ RewriteRule ^/cgi-bin/index.cgi products/list.php?category_id=8 [R=301,L]
RewriteEngine On RewriteCond %{QUERY_STRING} c=list&category_b_pk=1$ RewriteRule ^/cgi-bin/index.cgi products/list.php? [R=301,L] ?をURLの末尾に付与すると、元のGETパラメータをそのまま持つ
RewriteEngine On RewriteCond %{REMOTE_ADDR} !^192\.168\.0\.1$ RewriteCond %{REMOTE_ADDR} !^192\.168\.0\.2$ RewriteRule ^index.html /mainte.html [R=302,L] 外部にはメンテナンス画面を表示させて、社内には通常どおりアクセスさせたい場合に使用可能。
DocumentRootが/var/www/html メンテナンス用のディレクトリが/var/www/maintenance メンテナンス用のファイルがindex.htmlとlogo.gifで上記ディレクトリ内にあるとする 下記の記述をApacheのconfファイルに記述する ※数字の所をリダイレクトさせたくない接続元のIPアドレスに変更する ### Maintenance Alias /maintenance /var/www/html/maintenance RewriteEngine On RewriteCond %{REQUEST_URI} !^/maintenance/(.*)$ [NC] RewriteCond %{REMOTE_ADDR} !123\.456\.789\.101$ RewriteCond %{REMOTE_ADDR} !102\.103\.104\.105$ RewriteRule ^/(.*)$ /maintenance/index.html [R=302,L]
サーバー移行等でURLが代わり、リンク切れをさせないための対策です。下記のように連続して記述可能です。
RewriteEngine On RewriteCond ${REQUEST_URI} ^/about [OR] RewriteCond $REQUEST_URI} ^/news [OR] RewriteRule ^/(.*)$ http://www.inamuu.com/ [R=301,L]
RewriteEngine On RewriteRule ^/news http://www.inamuu.com/ [R=301,L] RewriteRule ^/about http://www.inamuu.com/test/ [R=301,L] RewriteRule ^/locate http://test.inamuu.com/locate/ [R=301,L]
VirtualhostやSSLを使用した場合は、それぞれのコンフィグファイルに記述を行う。