• 締切済み

httpsでmod_rewriteができない

はじめまして。 Linux環境で、apacheのhttp.confにmod_rewriteを記載し、httpsとhttpを切り替えたいと思っています。 httpd.confに以下のように記述しています。 <IfModule mod_rewrite.c> RewriteEngine on  #(1)httpで/aaaa/bbbbにアクセスされたときにhttps://~に変えたい RewriteCond %{REQUEST_URI} ^/aaaa/bbbb RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R]  #(2)httpsで/cccc/ddddにアクセスされたときにhttp://~に変えたい RewriteCond %{REQUEST_URI} ^/cccc/dddd RewriteCond %{HTTPS} on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R] </IfModule> 上記(1)のhttpでのアクセス時には、mod_rewriteが効いてhttpsへ切り替えられるのですが、 上記(2)のhttpsでのアクセス時には、mod_rewriteが効いていないようでhttpへ切り替えられません。 rewriteログを見てみると、当サイトへhttpでアクセスした場合にはログが出力されますが、 httpsでアクセスした場合には出力されません。 そもそもhttpsでのアクセスの場合にhttpd.confのmod_rewriteが効いていないようです。 ですが、これに対しどこを調査すべきかが分かっていません。 SSLの設定自体は出来ていると思っていて、 https://xxxx.jpのようにアクセスするとちゃんとページが表示されます。 どの当たりに問題がありそうでしょうか? 解析のヒントを頂けたらと思います。 宜しくお願い致します。

みんなの回答

  • disposez
  • ベストアンサー率0% (0/0)
回答No.1

443ポートへのアクセスを、ssl.confのvirtualhostで受け取っているのだと思います。もしそうなら、ssl.confのvirtualhostでリライトの設定をすればOKです。

関連するQ&A

  • mod_rewriteが効かない!

    サーバの運用上、mod_rewriteを使う必要が出来たので設定してみたのですが効きません。 FreeBSD4.11+Apache1.3.33で httpd.confファイルに直接書き込んで試しています。 LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c のどちらも書いてあるにもかかわらず、下記のテスト設定を試してみたらローカルIPからアクセス出来てしまいます。 RewriteEngine on RewriteCond %{REMOTE_ADDR} ^192\.168\.1\. ←ローカルネットワークのアドレス RewriteRule ^.*$ - [F] どのようにしたらいいですか? アドバイスお願い致します。

  • https→httpsのrewriteが出来ない

    https→httpsのrewriteが上手くいきません。 追加ドメイン取得前より、http→httpsのrewriteの設定をして利用していました。 今回、追加ドメイン(これを正式なURLとしたい)を取得したことにより、1つのファイルへ複数のドメインでアクセス出来る状況になってしまいました。  さくらのVPS   仮)IPアドレス   49.39.29.19     初期ドメイン  www1111aa.sakura.ne.jp  さくらのドメイン   仮)追加ドメイン  www.bbbb.com  ※CentOS httpd.confの2つのファイルを書きなおし、以下のrewriteは成功しました。  http://49.39.29.19 → https://www.bbbb.com  http://www1111aa.sakura.ne.jp→ https://www.bbbb.com  http://bbbb.com → https://www.bbbb.com しかしhttps→httpsの設定が上手くいかず、以下についてはそのままのアドレスとなってしまいます。  https://49.39.29.19  https://www1111aa.sakura.ne.jp  https://bbbb.com 上記の場合でもhttps://www.bbbb.comへ飛ぶように設定したいのですが、どのようにしたらよいかご教授ください。 ちなみに。私が既にhttpd.confに書いてダメだったものは以下です。 (1) <VirtualHost 49.39.29.19:443 > ServerName www.bbbb.com Redirect / https://www.bbbb.com </VirtualHost> (2) <IfModule mod_rewrite.c> RewriteEngine on ・・・ RewriteCond %{SERVER_PORT} ==443$ RewriteRule ^/(.*)?$ https://www.bbbb.com/$1 [L,R] </IfModule> ※ ^443$ともしてみましたがダメでした。 (3) <VirtualHost 49.39.29.19:443 > RewriteEngine On RewriteCond %{HTTP_HOST} ^bbbb\.com RewriteCond %{HTTP_HOST} ^www1111aa\.sakura\.ne\.jp RewriteCond %{HTTP_HOST} ^49\.39\.29\.19 RewriteRule /(.*) https://www.bbbb.com/$1 [R=301,L] </VirtualHost> ※VirtualHost以下を<IfModule mod_rewrite.c>で囲んだり、VirtualHostを<IfModule mod_rewrite.c>に変えたりしてみてもダメでした。 (4) Listen 80 Listen 443  と443を追記してみると、アパッチが再起動しなくなりました。エラー内容は以下です。 <エラー内容> NameVirtualHost *:80 has no VirtualHosts (98)Address already in use: make_sock: could not bind to address [::]:443 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:443 no listening sockets available, shutting down Unable to open logs 仕事で急遽サーバー構築をしなければならなくなり勉強をしているもので、素人ですので分かりやすい言葉で説明していただけると助かります。 よろしくお願いします。

  • 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
  • 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には対応しております。 ご教授のほど、よろしくお願いいたします。

  • .htaccessにmod_rewriteを設定して静的なURLにしたい

    .htaccessにmod_rewriteを設定して、動的なページのURLを静的なURLにしたいのですが、うまくいきません。 http://localhost/test/hoge.php/aiueo というURLで http://localhost/test/hoge.php?key=aiueo になるようにしたいのです。 検索して試しに以下のように記述したのですが、ダメでした。 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/test/hoge.php/(.+) /test/hoge.php?key=$1 [L] </IfModule> また「aiueo」の部分にスラッシュを含む場合もあるのですが、その際にも対応できるようにしたいです。 ご回答の程、よろしくお願いします。

    • ベストアンサー
    • PHP
  • mod_rewriteを使用するための設定について

    お世話になります。 mod_rewriteの設定についてアドバイスいただきたいと思います。 今までレンタルサーバーで.htaccessを使って、動的URLを静的URLでアクセスさせることに用いていたのですが、自前サーバー(FedraCore2.0+Apache2.0.53)にその.htaccessファイルを移してみたところ、思ったような動作をしてくれません。色々なサイトを参考に見て回ったところ、「httpd.conf」が怪しいと感じたのですが、 LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/mod_proxy.so の箇所もコメントアウトされておりますし、過去ログにもあったバーチャルホストの併用もしておりません。 ちなみに.htaccessは下記のような内容です。 DirectoryIndex index.htm index.php .ht RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^doc-([0-9]+).htm+ doc.php?number=$1 レンタルサーバーでは問題なく動作しておりましたので、.htaccess側の問題ではなくApache側の問題だと思っております。どなたかアドバイスの程よろしくお願いいたします。

  • mod_rewriteの環境変数を埋め込みたい

    お世話になります。 現在、以下の環境でWebアプリケーションを開発しています。 CentOS5.4 Apache2.2.3 Tomcat7 JavaSE6 ApacheとTomcatの連携にmod_proxy_ajpモジュールを使用しています。 ただ、クライアントからアクセスするURLと連携先のURLが異なるため、Java側でHttpRequestからコンテキストパス以降を取得するとajp連携されたパスしか取得できず、クライアントがアクセスしたURI情報が取得できません。 これを対策するために、Apacheモジュールのmod_rewriteとmod_headersを利用して、 クライアントがアクセスしたURIをリクエストヘッダに埋め込もうとしています。 以下httpd.confに追加した設定です。 (rewrite.confも試しました) RewriteEngine On RewriteRule .* - [E=ORG_QUERY_STRING:%{QUERY_STRING}] RequestHeader append "test_query_string" %{ORG_QUERY_STRING}e 設定後、Apacheを再起動してWebアプリケーションにアクセスすると、リクエストヘッダ自体は追加されているのですが値が(null)となってしまい取得できません。 mod_rewriteの環境変数が取得できていないのかと思い、 RewriteRule .* - [E=ORG_QUERY_STRING:TEST] と固定文字列を埋め込んでも取得できませんでした。 このことからENVによる環境変数への設定、または参照が出来ていないのかと思われますが、どうにも解決できません。 参照時に RequestHeader append "test_query_string" %{ENV:ORG_QUERY_STRING}e としても同様の結果でした。 心当たりのある方、またはデバッグ方法や別解などアドバイスを頂けないでしょうか? なお、httpd.confではmod_rewrite、mod_headersのモジュール定義は有効となっております。 また、環境変数のスペルミスもコピペして確認しております。

  • mod_rewriteのRewriteMapについて

    初めて質問させていただきます。 mod_rewriteのRewriteMapの使い方について質問があります。 /etc/httpd/conf/httpd.conf に以下のように書きました。 <IfModule mod_rewrite.c> RewriteEngine on RewriteLog /etc/httpd/logs/rewrite_log RewriteLogLevel 2 RewriteMap userMap txt:/home/userMap/userMap.txt </IfModule> この状態で、Apache2を再起動すると、Apacheが起動する際に以下のエラーが出て起動できません。 -- httpd を起動中: Syntax error on line 1036 of /etc/httpd/conf/httpd.conf: RewriteMap: file for map userMap not found:/home/userMap/userMap.txt -- エラーメッセージは指定されたファイルがないと言うことだと思うのですが、指定した位置には確かにファイルがあることを確認しています。 ファイルの所有権や上位ディレクトリのパーミッションの関係なのかなと思って、いろいろ変えて試しているのですが、一向にうまくいきません。 RewriteMapのファイルを置く位置はどこがベストなのかとか、パーミッションや所有権などで気をつけるべきポイントなどを教えていただけると助かります。 よろしくお願いいたします。

  • mod_rewriteの書き方について

    mod_rewriteの書き方について いつもお世話になっております。 mod_rewiteについて質問させていただきます。 複数の設定をしたいのですが、404のエラーが出てしまい思っている動作になりません。 -------------------------------------------------- RewriteEngine on (1) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule hoge/(.*)\/(.*)\/(.*)\/(.*)\.html$ /hoge/$1/$2.php?$3=$4 [L] RewriteRule hoge/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\.html$ /hoge/$1/$2.php?$3=$4&$5=$6 [L] (2) RewriteRule (.*)\.html$ /$1.php [L] -------------------------------------------------- 上記の設定を記載しております。 (1)はパラメーターがあった場合、URLの書き換えをしています。 ここはちゃんと動作しております。 (2)で、http://www.hoge.com/dir/index.html にアクセスした場合 /dir/index.php を呼び出すことに成功はしています。 ただ、http://www.hoge.com/dir/category.html にアクセスした場合 PHPファイルではなく、HTML(/dir/category.html)の場合404のエラーになってしまいます。 分かりづらい説明で申し訳ございませんが、ご教示よろしくお願いいたします。 [環境]  PHP:5.1.6  Linux:調べられません・・・わりと新しいバージョンです。

  • mod_rewrite の記述について

    .htaccess に、mod_rewrite の記述を書いて、以下のようなことをしたいのですが、 1.http://www.example.com/abc/ の場合 URLはそのままで、内容は /main/abc/以下 (の同名ファイル)を表示 2.http://www.example.com/main/abc/ の場合 URLは http://www.example.com/abc/ になり、内容は/main/abc/を表示 以前教えていただいた以下の記述でできるのですが、ディレクトリが追加されたら、.htaccess にも追加が必要になってしまいます。 どのように実現すればよいでしょうか? ------------------------------------------------------------ RewriteCond %{REQUEST_URI} ^/main/(.*)$ RewriteCond %{HTTP:My_Redirect} !yes RewriteRule ^main/(.+)$ http://example.com/$1 [QSA,R] RewriteCond %{REQUEST_URI} ^/(abc|aaa|bbb|ccc|ddd)/ RequestHeader set My_Redirect yes RewriteRule ^(.*)$ /main/$1 [QSA,L] ------------------------------------------------------------