• 締切済み

Apacheリクエストヘッダを制御してのリダイレクト

apacheのリダイレクトで質問させていただきます。 http, httpsともに以下のようなリダイレクトを行いたいと思ってます。 (https) https://a.com/tenso/ 以下のアクセスを https://b.com/tenso/ にリダイレクト。 (http) http://a.com/tenso/ 以下のアクセスを http://b.com/tenso/ にリダイレクト。 どちらもドメインを置き換えたいといったシンプルな要件です。 が、現在httpsはLBで処理を行っており、apahe側では port80で処理しています。このため、https通信を認識できず リダイレクトが行えない状況です。 https通信の場合、LBからのリクエストヘッダに「SSL」とわかる文字列が挿入される設定になっているとのことで、このリクエストヘッダを 制御してリダイレクトを行えないものでしょうか? mod_proxyはssl非対応とのことと、あまり詳しくなく大変困ってます; どうぞよろしくお願いします。

みんなの回答

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

mod_rewrite を使えばできるんじゃないかな。 RewriteEngine On RewriteCond %{HTTPS} on RewriteRule ^/tenso/(.*)$ https://b.com/tenso/$1 [R] RewriteCond %{HTTPS} off RewriteRule ^/tenso/(.*)$ http://b.com/tenso/$1 [R] ただし、RewriteCond 検査条件は > リクエストヘッダに「SSL」とわかる文字列が挿入され ているのを検査してください。

参考URL:
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond
nob666666
質問者

お礼

t-otukaさん、回答有難うございます。 サンプルまで記述いただき、大変参考になります。 「RewriteCond 検査条件」というものについてまず詳しく調べてみます。 取り急ぎ御礼まで。 有難うございます。

関連するQ&A

  • SSLのリダイレクトについて

    sslのリダイレクトの作業を急いでやらないといけないのですが、sslに関しては全くの初心者なので調べながらいろいろやってみましたがどうしてもうまくいかず困っています。。 Wordpressでサイトを作成していてドメイン直下の.htaccessにリダイレクトの記述をしています。 サーバーはGMOのiCLUSTAで、sslはジオトラストです。 http://○○○.jp/ にアクセスした場合に、 https://ssl.○○○.jp/ へリダイレクトされるようにしたいです。 .htaccessの記述内容です # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress RewriteEngine on RewriteCond %{HTTPS} on RewriteRule ^(.*)$ https://ssl.○○○.jp/$1 [R=301,L] この記述をしていますが、リダイレクトされたりされなかったりの不安定な状態です。 されないことの方が多いのでどの条件で動いているのかがわかりません。 RewriteCond %{HTTPS} on を、 RewriteCond %{HTTPS} off にするとリダイレクトされますが、処理がループされていますという表示が出てしまいます。 どのような記述をすればうまくいくのでしょうか?

  • HTTPSにおけるリダイレクト設定に関して

    Apache2.2+mod_sslにてSSL通信環境を構築しました。 DNS設定は「sample.com」も「www.sample.com」も同じサーバIPを指定しております。 「www.sample.com」をコモンネームとした証明書を認証局から取得し、 「https://www.sample.com/」にアクセスする場合は問題はありませんでした。 しかし、「https://sample.com/」にアクセスすると、 IEでは「このWebサイトのセキュリティ証明書には問題があります。」と表示されてしまいます。 この問題を解決しようとリダイレクトの対処も含め、以下の様な対応を行いましたが解決できませんでした。 どの様な対応を行えば、上記問題を解決する事ができるのでしょうか? 「sample.com」についても証明書を発行してもらうしかないのでしょうか? 皆様のお知恵をお借りしたく、何卒よろしくお願い致します。 以下、行った対応 ―――――――――――――――――――――― ■mod_rewrite.soを有効にする。 LoadModule rewrite_module modules/mod_rewrite.so ■httpd.confの末尾に以下を追記する。 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^sample\.com RewriteRule ^/(.*)$ https://www.sample.com/$1 [R=301,L] RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*)?$ https://%{HTTP_HOST}/$1 [L,R] </IfModule> ■3.httpd-ssl.confに以下を追記する。 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^sample\.com RewriteRule ^/(.*)$ https://www.sample.com/$1 [R=301,L] </IfModule>

  • フラグメント識別子(#)のリダイレクトについて

    以下のようなアンカーリンク付URLからアンカーリンク付URLへリダイレクトをしようとしました。 リダイレクト先 → A.com/dummy/test/page#001 リダイレクト元 → B.com/dummy/test-page#001 .htaccessで処理しようとしたところ、 フラグメント識別子(#)はサーバに届かないからできないと聞きました。 あきらめ悪く以下のコードを試したところ、 普通にリダイレクトできました。 <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^dummy/test/page(.*)$ https://www.B.com/dummy/test-page/$1/ [L,R=301,NE] </IfModule> (環境 → サーバー:Xserver・php:7.4.25) 正直混乱しています。 フラグメント識別子のリダイレクトは普通に可能なのでしょうか? ある環境下限定なのでしょうか? ご面倒おかけします。

    • ベストアンサー
    • HTML
  • 301リダイレクトの方法について教えてください。

    301リダイレクトの方法について教えてください。 htaccess設定については初心者です。 1.http://○○.com/kanagawa/から、http://○○.com/kanagawa.htmlへ、 2.http://○○.com/kanagawaから、http://○○.com/kanagawa.htmlへ、 それぞれ301リダイレクトをさせたいのです。 htaccessで、「mod_Rewrite」設定が必要になりますが、 1については、 # kanagawaファイルの場合/にリライト RewriteCond %{THE_REQUEST} ^.*/kanagawa RewriteRule ^(.*)kanagawa$ http://○○.com/kanagawa.html [R=301,L] でリダイレクトができるようになりました。 しかし、2については、 どのように設定するのでしょうか? ちなみに、 RewriteCond %{THE_REQUEST} ^.*/kanagawa/ RewriteRule ^(.*)kanagawa/$ http://○○.com/kanagawa.html [R=301,L] こんな感じにしてみましたが、リダイレクトできませんでした。 方法ご存じの方、おしえてください。

  • mod_rewriteについて教えてください。

    mod_rewriteについてお願いします。 「a」と「b」というフォルダにそれぞれ「index.html」「test.html」が入っています。「a」と「b」で「index.html」「test.html」の内容はちがいます。 わたしが一番望んでいるのは http://example.com/a/以下にアクセスがあった場合 http://example.com/b/以下にリダイレクトさせるというものです。 例) http://example.com/a/test.htmlにアクセスがあったらhttp://example.com/b/test.htmlにリダイレクト。 ------------------------------------------------------------ Options +FollowSymLinks AddHandler cgi-script htaccess <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^/a/$ /b/$1 [R=302,L] </IfModule> ------------------------------------------------------------ としてみましたが、リダイレクトされません。 ちなみに RewriteRule ^$ /b/$1 [R=302,L] と書くと、http://example.com/にアクセスがあった場合 http://example.com/b/にリダイレクトされましたので mod_rewriteには対応しております。 ご教授のほど、よろしくお願いいたします。

  • リダイレクトでPOSTリクエストを復元する方法

    【行いたいこと】 RailsでRESTフルなリソースを扱うアプリを開発しています。 アプリはユーザ認証機能を備えており、 RESTフルなリソースの操作(作成や削除など)はログインしたユーザだけが行えます。 ログインしていないユーザがこれらの操作をおこなうリクエストを送ってきた場合には、 認証ページに遷移させ、ユーザがログインした直後に、 ユーザ操作なしで当初のアクセスに対する操作処理を行いたいです。 【もくろみ】 ログインしたユーザだけが行える操作へのアクセスは、 フィルタ(before_filter)を使いインターセプトし、 ログインしていないユーザの場合には認証ページにリダイレクトします。 インターセプタ時点でリクエスト情報をセッションに格納しておき、 ログイン後にセッションからリクエスト情報を取り出し、 その情報を使ってリダイレクトすれば良いと考えました。 【問題点】 GETリクエスト(GETメソッドでのHttpリクエスト)をインターセプタした場合は上手くいきましたが、 POSTリクエストではリクエストを復元できません。 GETメソッドのリクエストになってしまいます。 リダイレクト(redirect_to)はブラウザにGETリクエストしか要求できないためです。 何か解決策はありますでしょうか。 よろしくお願いします。

  • apache内httpd.confの転送記述

    http://admin.example.com 配下の全てのREQUESTにたいして、 https://admin.example.com にリダイレクトするにはどうすればいいのでしょうか? mod_rewriteかmod_redirectを使うことは分かるのですが、記述方法がわからず。 よろしくお願いします。

  • htaccessのリダイレクトについて

    html、phpなどの拡張子付きリクエストを、末尾がスラッシュの URLにリダイレクトしたいのですが、方法をご教示ください。 例えば、 http://www.hoge.com/hoge/ へのリクエストを、異なるサーバーの http://www.hoge2.com/hoge/ にリダイレクトしたいと考えており、以下のように記述しています。 #.htaccessの記述 Redirect permanent /hoge/ http://www.hoge2.com/hoge/ しかし、 /hoge/hoge.php のリクエストがあった場合、以下のようにドキュメント名を付加される ので困っています。 http://www.hoge2.com/hoge/hoge.php 宜しくお願いします。

    • ベストアンサー
    • PHP
  • Apache mod_rewriteの設定について

    LAMP環境でウェブサイトの制作を行っております。 (cakePHP2.6.4使用) サーバのmod_rewriteの設定を行って、URLの書き換えを行いたいと思っております。 例えば、 http://test.com でアクセスした場合、 http://www.test.com にリダイレクトするように設定することはできたのですが、 現在の状態ですと http://test.com/a でアクセスした場合、 http://www.test.com にリダイレクトしてしまいます。 できれば、 http://www.test.com/a にリダイレクトするようにしたいのですが、 どのように設定すればよいか分かりません。 お分かりいただける方いらっしゃいましたら、 ご教授のほどよろしくお願い致します。

  • mod _rewriteによる二重リダイレクト

    mod_rewriteで下記のようなことをしたいと思っています。 1.http://~/ABCDEFG.jpgにアクセスがあったら、 2.http://~/AB/CD/EFG.jpgにリダイレクトする。 3.http://~/AB/CD/EFG.jpg がなかったらhttp://~/NO.jpgにリダイレクトする。 2.まではできるのですが、3.に進みません・・・。 このようなことを実現できないでしょうか。すごく困っております・・・。 お手数ですがご教示いただけないでしょうか。 ---- 以下2.までできたmod_rewrite <DirectoryMatch ~> <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ([a-z0-9A-Z][a-z0-9A-Z])([a-z0-9A-Z][a-z0-9A-Z])([a-z0-9A-Z]+\.jpg) $1/$2/$3 [L] </IfModule> </DirectoryMatch>

    • ベストアンサー
    • PHP