質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

2回答

1248閲覧

Apacheの「Rewrite」が上手く行われない

merani

総合スコア11

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

0クリップ

投稿2019/06/14 11:00

Apacheで「Rewrite」のルールを作成しておりますが、期待している動作になりません。
正規表現も詳しくなく、「Rewrite」の記載方法もWeb検索で確認しましたが、
解決できませんでした。大変申し訳なく、お恥ずかしい限りですが設定の記載方法を
ご教授いただけないでしょうか。

●環境
OS:WindowsServer2012
Apacheバージョン:2.4
ブラウザ:IE11

●期待している動作
アクセス元のリクエスト:http://AAAhost/test1/AAA/BBB
https://AAAhost/test1/AAA/BBB
RewriteしたいURL:https://AAAhost:56000/AAA/BBB

●試したこと
Apacheの「httpd.conf」に以下の記載を行いましたが、結果は以下の通りでした。

■記載
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteCond %{SERVER_PORT} 443
RewriteRule /test1/ https://AAAhost:56000/AAA/BBB [R=301,L]

■結果
アクセス元のリクエスト:http://AAAhost/test1/AAA/BBB
URLバーの表示:http://AAAhost/AAAhost:55000/AAA/BBB
※55000ポートは、httpポートとして、リッスンしているポートです。

アクセス元のリクエスト:https://AAAhost/test1/AAA/BBB
ブラウザの表示:このページは表示できません

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2019/06/15 03:45 編集

> ●期待している動作 > RewriteしたいURL:https://AAAhost:56000/AAA/BBB ポートが 56000 になっています。 > URLバーの表示:http://AAAhost/AAAhost:55000/AAA/BBB > ※55000ポートは、httpポートとして、リッスンしているポートです。 55000 ポート??? 質問の中に 55000 と 56000 の両方のポートが記載されています。 どちらが正しいポートでしょうか? 使い分けが有るのであれば、使い分けのルールを具体的に記載してください。
guest

回答2

0

以下の記載を行うことで正常に接続が行えた。

サービスA側の設定
●httpd.conf
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^test1/(.*) https://AAAhost:56000/AAA/BBB [R=301,L]

●httpd-ssl.conf
<VirtualHost _default_:443>
RewriteEngine on
RewriteCond %{SERVER_PORT} 443
RewriteRule ^test1/(.*) https://AAAhost:56000/AAA/BBB [R=301,L]

サービスB側の設定
●httpd-ssl.conf
<VirtualHost _default_:56000>

投稿2019/06/18 06:27

merani

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

「記載」欄と「結果」欄が合致しませんね。
RewriteCondは続けるとand条件になりますので、「記載」欄のように書くと条件は絶対に成立しません。

Apache

1# わかりやすい 2RewriteEngine on 3RewriteCond %{SERVER_PORT} 80 4RewriteRule ^test1/(.*) https://AAAhost:56000/$1 [R=301,L] 5RewriteCond %{SERVER_PORT} 443 6RewriteRule ^test1/(.*) https://AAAhost:56000/$1 [R=301,L] 7# or条件で書くと 8RewriteEngine on 9RewriteCond %{SERVER_PORT} 80 [OR] 10RewriteCond %{SERVER_PORT} 443 11RewriteRule ^test1/(.*) https://AAAhost:56000/$1 [R=301,L] 12# 普通はこうか 13RewriteEngine on 14RewriteCond %{SERVER_PORT} !56000 15RewriteRule ^test1/(.*) https://AAAhost:56000/$1 [R=301,L]

↑訂正しました。

投稿2019/06/14 12:21

編集2019/06/15 06:07
otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

merani

2019/06/16 12:38 編集

早速ご回答いただき、誠にありがとうございます。 RewriteCondがand条件となる旨、ありがとうございます。勉強になりました。 いただいた回答の内容で記載を行ってみましたが、上手く接続が行えませんでした。 Apacheのサービスを複数登録しており、55000ポートと56000ポートは2個目のApacheサービスで使用しているポートです。 「LogLevel rewrite:trace8」を記載して出力した際のログが以下の通りです。何かわかることなどございませんでしょうか。 ●動作イメージ① 1.80番ポートでApache1がリクエストを受ける 2.Apache1がApache2の56000ポートにrewriteする。 ●動作イメージ② 1.443番ポートでApache1がリクエストを受ける 2.Apache1がApache2の56000ポートにrewriteする。 「http://AAAhost/test1/AAA/BBB」アクセス時に出力したログ ●error.log [15/Jun/2019:11:45:19 +0900][rewrite:trace2] [pid 3996:tid 3060] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61080] xxx.xxx.xxx.xxx - - [AAAhost/sid#e56e17bda8][rid#e56eb97bc0/initial] init rewrite engine with requested uri /AAAhost:55000/AAA/BBB [15/Jun/2019:11:45:19 +0900][rewrite:trace3] [pid 3996:tid 3060] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61080] xxx.xxx.xxx.xxx - - [AAAhost/sid#e56e17bda8][rid#e56eb97bc0/initial] applying pattern '^/test1/(.*)' to uri '/AAAhost:55000/AAA/BBB' [15/Jun/2019:11:45:19 +0900][rewrite:trace3] [pid 3996:tid 3060] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61080] xxx.xxx.xxx.xxx - - [AAAhost/sid#e56e17bda8][rid#e56eb97bc0/initial] applying pattern '^/test1/(.*)' to uri '/AAAhost:55000/AAA/BBB ' [15/Jun/2019:11:45:19 +0900][rewrite:trace1] [pid 3996:tid 3060] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61080] xxx.xxx.xxx.xxx - - [AAAhost/sid#e56e17bda8][rid#e56eb97bc0/initial] pass through /AAAhost:55000/AAA/BBB [15/Jun/2019:11:45:19 +0900][core:error] [pid 3996:tid 3060] (20024)The given path is misformatted or contained invalid characters: [client xxx.xxx.xxx.xxx:61080] AH00127: Cannot map GET /AAAhost:55000/AAA/BBB HTTP/1.1 to file ●access.log xxx.xxx.xxx.xxx - - [15/Jun/2019:11:45:19 +0900] "GET /AAAhost:55000/AAA/BBB HTTP/1.1" 403 266 0 「https://AAAhost/test1/AAA/BBB」アクセス時に出力したログ ●access.log xxx.xxx.xxx.xxx - - [15/Jun/2019:11:47:21 +0900] "GET /test1/AAA/BBB HTTP/1.1" 404 238 ●ssl_request.log [15/Jun/2019:11:47:21 +0900] xxx.xxx.xxx.xxx TLSv1.2 ECDHE-RSA-AES256-SHA384 "GET /test1/AAA/BBB HTTP/1.1" 238 ●ログで出力しているポート情報 55000ポート:httpでApache2がリッスンしているポート 61080ポート:リッスンしていないポートですが、なぜか61080にリクエストしにいっている。
otn

2019/06/15 06:08

質問からのコピペ後の修正が一部漏れていたので、訂正しました。
merani

2019/06/16 12:39 編集

ご回答いただき、ありがとうございます。 httpのリクエストについて、確認したところブラウザのキャッシュが原因でした。 恐らく、過去に設定したものがキャッシュされたものだと思います。 ブラウザのキャッシュクリアを行ったところ、httpもhttpsと同様に404エラーとなりました。 httpとhttpsアクセス時に以下のログが出力していたのですが、HTTPの「error_2019-06-16.log」で ポート「61561」にアクセスしにいっている?ようなエラーでした。61561に関する「Rewrite」の 設定をgrep検索しましたが、設定がなくブラウザのキャッシュをクリアしても同様のエラーが出るので、 原因がわかりませんでした。。 「https://AAAhost/test1/AAA/BBB」アクセス時に出力したログ ●ssl_request.log [16/Jun/2019:15:07:16 +0900] xxx.xxx.xxx.xxx TLSv1.2 ECDHE-RSA-AES256-SHA384 "GET /test1/AAA/BBB HTTP/1.1" 238 ●access.log xxx.xxx.xxx.xxx - - [16/Jun/2019:15:07:16 +0900] "GET /test1/AAA/BBB HTTP/1.1" 404 238 「http://AAAhost/test1/AAA/BBB」アクセス時に出力したログ ●error_2019-06-16.log [Sun Jun 16 15:09:56.609074 2019] [rewrite:trace2] [pid 3904:tid 3060] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61561] xxx.xxx.xxx.xxx - - [AAAhost/sid#1aa301a198][rid#1aa3b4bf60/initial] init rewrite engine with requested uri /test1/AAA/BBB [Sun Jun 16 15:09:56.609074 2019] [rewrite:trace3] [pid 3904:tid 3060] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61561] xxx.xxx.xxx.xxx - - [AAAhost/sid#1aa301a198][rid#1aa3b4bf60/initial] applying pattern '^test1/(.*)' to uri '/test1/AAA/BBB ' [Sun Jun 16 15:09:56.609074 2019] [rewrite:trace3] [pid 3904:tid 3060] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61561] xxx.xxx.xxx.xxx - - [AAAhost/sid#1aa301a198][rid#1aa3b4bf60/initial] applying pattern '^test1/(.*)' to uri '/test1/AAA/BBB ' [Sun Jun 16 15:09:56.609074 2019] [rewrite:trace1] [pid 3904:tid 3060] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61561] xxx.xxx.xxx.xxx - - [AAAhost/sid#1aa301a198][rid#1aa3b4bf60/initial] pass through /test1/AAA/BBB ●access_2019-06-16.log xxx.xxx.xxx.xxx - - [16/Jun/2019:15:09:56 +0900] "GET /test1/AAA/BBB HTTP/1.1" 404 238 01
otn

2019/06/16 10:24

パスが違うので、無関係なログでは? あるいは、パスの書き間違い?
merani

2019/06/16 12:47

ログの変換ミスでした。申し訳ございません。訂正しました。
otn

2019/06/16 13:17

61561は、クライアント側のポート番号なので関係ないです。 あとは、どこか間違えていると思いますが、こちらからは見えないので分かりません。
merani

2019/06/17 23:56

色々試してみた結果、以下の記載でHTTPからアクセスした場合は正しくrewriteされるようになりました。ありがとうございました!HTTPSからHTTPSにrewriteする方法は、インターネットの情報を調べると記載方法が異なっているようで、404エラーとなってしまいました。インターネットの情報を調べて、記載方法を確認してみます。なお、「https://AAAhost:56000/AAA/BBB」を直接指定して、アクセスを行えない状態でしたが、「httpd-ssl.conf」の「<VirtualHost _default_:443>」の443を56000に変更してアクセスが行えるようになりました。 RewriteEngine on RewriteCond %{SERVER_PORT} 80 RewriteRule ^test1/(.*) https://AAAhost:56000/AAA/BBB [R=301,L] RewriteCond %{SERVER_PORT} 443 RewriteRule ^test1/(.*) https://AAAhost:56000/AAA/BBB [R=301,L]
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問