🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
mod_rewrite

ApacheウェブサーバーのためのURL書き換えモジュールです。主にプリティーURLに使われていますが、同様に単純置換を超えた、多様なタスクの処理能力や柔軟性があります。

Apache

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

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Q&A

解決済

2回答

1143閲覧

apache2にてグローバルIPからアクセスした場合とローカルIPからアクセスした場合で挙動が異なる

U_U_Jenkins

総合スコア110

mod_rewrite

ApacheウェブサーバーのためのURL書き換えモジュールです。主にプリティーURLに使われていますが、同様に単純置換を超えた、多様なタスクの処理能力や柔軟性があります。

Apache

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

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

0グッド

1クリップ

投稿2019/12/15 09:48

やりたいこと

ローカル接続だと意図通りの挙動をするのですが、
グローバル接続だと挙動が変わってしまい、意図としない挙動となってしまいます。
グローバルでもローカルのような挙動をさせたいと思ってます。

環境

REST構成のようなWebサービスを構築しております。
ポートの設定、ファイアウォールなどの設定は全て済んでおり、外部公開されるようになっております。

#### サーバーディレクトリ構成

directory

1/var/www/ 2|-app 3| |-phpフォルダ 4| 5|-html[公開ディレクトリ] 6 |-.htaccess 7 |-index.php 8 |-uploader.html

htmlディレクトリのなかにphpファイルがあるのは置いておいてください...

.htaccesssの構成

apache2の方でmod_rewiteは導入済み
以下はhttp://localhost/api〜
と始まる場合において、URLの内容を保持した状態でindex.phpにリダイレクトが発生するようになってます。

<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^api/(.*)$ index.php </IfModule>

##ローカルで接続した場合の挙動

  1. http://localhost

・index.phpに接続されます。
2. http://localhost/api/uploader
・index.phpを介してuploader.htmlに繋がり、意図とした挙動となってます。

グローバルから接続した時の挙動

  1. http://[グローバルIP]:[httpポート番号]

・mod_rewriteが動作して、問題なくindex.phpに接続できます。
2. http://[グローバルIP]:[httpポート番号]/api/uploader
・存在しないサーバーとしてエラーが返されます。←なぜ???


「グローバルから接続した時の挙動」の"2"においてなぜか意図とした挙動にならず、どうして良いかわかりません。
mod_rewiteが正常に動作していないのかな?って思いましたが、ローカルでは問題なかったので別の要因だろうか・・・。

問題の解決において情報が欠けている場合があればお教えいただきたいです。

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

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

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

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

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

yut148

2019/12/15 10:32

直接の回答にはなりませんがDocumentRootの確認と記載をお願い申し上げます。同時にVirtualhostなど併用していないかの確認と記載をお願い申し上げます。
CHERRY

2019/12/15 10:43 編集

ログファイルには、どの様なメッセージが記録されているでしょうか?
U_U_Jenkins

2019/12/15 11:32 編集

すみません、ログファイルを完璧に見落としておりました。 携帯からグローバルで接続したログを見てみると、401が出てました。 随分前ですが、https通信の設定を中途半端で捨ててました。 ありがとうございます。(いらないかもしれないけど)解決したらまたご連絡します。
otn

2019/12/15 15:59

> 存在しないサーバーとしてエラーが返されます 具体的にはどういうメッセージでしょう? あとは、Virtualhost がどうなっているかですね。
guest

回答2

0

自己解決

答えはaccess.logに全て記されておりました。
結局のところグローバル上で挙動が異なるURLにアクセスしたところ401エラーが出力されていました。
細かい原因はともあれ、オレオレ証明書を使ってたのが悪いのか、途中でSSLの設定を投げていた訳で
HTTPS通信の設定を適切に行われていませんでした。

SSLを認証するためにcertbotを利用し、証明書を発行しようとするも
プロバイダはGMOを利用しており、ipv6プラスで通信していたためウェルノンポートが使用不可になってました。
通常certbotでSSL化する場合は、対象のドメインに対してポート80を用いて通信できるかチェックをします。
なのでPPPOE設定を有効にしてipv4で通信するように変更しようとしますが、正しく入力をしても接続失敗の連続。

何かおかしいと思い、プロバイダに問い合わせてみると「ipv6プラスの通信をしている場合はPPPOEでの接続は出来ない」と言われました。結局問い合わせ中にPPPOE通信をその場で有効にしてもらうことができたのでよかったですが。

あとはドメインを買ってDNS設定をした後に作ったドメインでcertbotを用いて証明書を発行して
apacheの設定で生成した証明書を指定したら無事、意図とした挙動をする暗号化されたWebサーバーになりました。

投稿2019/12/21 15:33

U_U_Jenkins

総合スコア110

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

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

0

以下はhttp://localhost/api〜と始まる場合において

ということならそうなって当然というはなしになりますね

投稿2019/12/15 10:43

y_waiwai

総合スコア88038

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

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

U_U_Jenkins

2020/01/29 04:30

当たり前なこと言わないでくださいね
y_waiwai

2020/01/29 04:36

もうちょっとヒネったほうがよかったでしたかw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問