目次†
パラメータ関連†
備考:2015年11月5日追記†メンテナンスページへのリダイレクトについては、下の方の302リダイレクトは最適ではないようなので、下記を参考に設定するようにしてください。 メンテナンスページへのリダイレクト†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] フラグの意味†
同じドメインの別ディレクトリにあるファイルへのリダイレクト†Apacheにて「mod_rewrite」が読み込まれている場合は、Rewriteモジュールにてリダイレクト処理が可能です。 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配下を意味しています。 別ドメインのアドレスをリダイレクト処理する(AからBへ)†RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.hogehoge\.net [NC] RewriteRule ^(.*)$ http://www.hogehoge.jp/$1 [R=301,L] index.phpとindex.htmlのアクセスを統一させる。†例えばトップページで使用していない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/配下のページへのアクセスを許可する設定にしています。 トップページへのアクセスのみリダイレクト†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] URLの書き換え www有りへの統一†RewriteEngine on RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] URLの書き換え www無しへ統一†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] Apacheでhttp://*のアクセスを全てhttps://にリダイレクトする方法&aname(o9344546,super,full,nouserselect){†};# vi /etc/httpd/conf.d/rewrite.conf RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 特定のディレクトリのみhttpsへリダイレクトし、それ以外はhttpでアクセスさせる方法†### 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] Pound配下の場合†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文字以上存在すればリダイレクトする。 パラメータ関連†
PHPパラメータを持つURLへアクセスがあったらリダイレクト†RewriteEngine On RewriteCond %{QUERY_STRING} it_id=1393347333 RewriteRule ^/item.php http://inamuu.com/yoyaku/index.php? [R=301,L]
参考URL:http://d.hatena.ne.jp/shimooka/20070328/1175047714 CGIなどのGETパラメータを持っているURLを別のパラメータを持つURLへ書き換え†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] CGIなどのGETパラメータを持っているURLを同じパラメータのURLへ書き換え†RewriteEngine On RewriteCond %{QUERY_STRING} c=list&category_b_pk=1$ RewriteRule ^/cgi-bin/index.cgi products/list.php? [R=301,L] ?をURLの末尾に付与すると、元のGETパラメータをそのまま持つ 特定のIPアドレスからのアクセスは除外して、それ以外はリダイレクトする。†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に対して†サーバー移行等でURLが代わり、リンク切れをさせないための対策です。下記のように連続して記述可能です。 例1.同じURLへリダイレクトする†RewriteEngine On RewriteCond ${REQUEST_URI} ^/about [OR] RewriteCond $REQUEST_URI} ^/news [OR] RewriteRule ^/(.*)$ http://www.inamuu.com/ [R=301,L] 例2.別のドメインやURLにリダイレクトする†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を使用した場合は、それぞれのコンフィグファイルに記述を行う。 参考書籍† |