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

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

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

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

.htaccess

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

Q&A

解決済

1回答

2478閲覧

.htaccessでRewriteRuleを使ってURLを書き換えると”File does not exist”になってしまう

abroad128

総合スコア60

Apache

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

.htaccess

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

0グッド

0クリップ

投稿2020/07/11 15:47

編集2020/07/12 13:19

当方で用意したAWSのEC2上のApacheのWEBサーバーからクライアントが画像を取得しようとしたときに,サーバーにファイルが存在しない場合は,EC2が自宅のWEBサーバーからファイルを取得して,それをクライアントに返すようにしたい.

そこで,AWSのWEBサーバーの[DocumentRoot]/archive/.htaccessに下記のように設定した.

htaccess

1RewriteEngine On 2RewriteCond %{REQUEST_URI} ^.*/storage/[^/]+.(jpg|png|gif)$ 3RewriteCond %{REQUEST_FILENAME} !-f 4RewriteRule ^storage/([^/]+.(?:jpg|png|gif))$ http://xxx.xxx.xxx.xxx:8080/storage/$1 [L,P]

例えば,https://hoge.jp/archive/storage/aaa.jpgにアクセスして,ファイルが存在しない場合はリバースプロキシでhttp://xxx.xxx.xxx.xxx:8080/storage/aaa.jpgからデータを取得してクライアントに返すようにしたい.

しかし,https://exmaple.com/archive/storage/aaa.jpgにアクセスすると404エラーとなってしまう.

Apacheのerrorログを見ると以下のようになっていて,最後の行のhttp://xxx.xxx.xxx.xxx:8080/storage/aaa.jpgはブラウザから直接アクセスすれば画像を見ることができる上に,EC2上でwgetすると正常に取得できる.

解決方法が分かる方はいらっしゃいますでしょうか.

text

1[Sun Jul 12 00:05:16.006257 2020] [rewrite:trace3] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] strip per-dir prefix: /home/ubuntu/public_html/archive/storage/aaa.jpg -> storage/aaa.jpg 2[Sun Jul 12 00:05:16.006267 2020] [rewrite:trace3] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] applying pattern '^storage/([^/]+\.(?:jpg|png|gif))$' to uri 'storage/aaa.jpg' 3[Sun Jul 12 00:05:16.006278 2020] [rewrite:trace4] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] RewriteCond: input='/archive/storage/aaa.jpg' pattern='^.*/storage/[^/]+\.(jpg|png|gif)$' => matched 4[Sun Jul 12 00:05:16.006286 2020] [rewrite:trace4] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] RewriteCond: input='/home/ubuntu/public_html/archive/storage/aaa.jpg' pattern='!-f' => matched 5[Sun Jul 12 00:05:16.006291 2020] [rewrite:trace2] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] rewrite 'storage/aaa.jpg' -> 'http://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg' 6[Sun Jul 12 00:05:16.006297 2020] [rewrite:trace2] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] escaped URI in per-dir context for proxy, http://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg -> http://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg 7[Sun Jul 12 00:05:16.006308 2020] [rewrite:trace2] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] forcing proxy-throughput with http://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg 8[Sun Jul 12 00:05:16.006314 2020] [rewrite:trace1] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] go-ahead with proxy request proxy:http://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg [OK] 9[Sun Jul 12 00:05:16.006350 2020] [core:info] [pid 15694] [client xxx.xxx.xxx.xxx:61496] AH00128: File does not exist: proxy:http://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg

EC2のApacheの手動設定内容(主要箇所抜粋・ファイル混在)

Apache

1<VirtualHost *:80> 2 DocumentRoot /home/ubuntu/public_html 3 RewriteEngine On 4 RewriteCond %{HTTPS} off 5 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 6</VirtualHost> 7 8<IfModule mod_ssl.c> 9 <VirtualHost _default_:443> 10 DocumentRoot /home/ubuntu/public_html 11 </VirtualHost> 12</IfModule> 13 14<Directory "/home/ubuntu/public_html"> 15 AllowOverride All 16 Options ExecCGI MultiViews SymLinksIfOwnerMatch IncludesNoExec 17 Require all granted 18 AddHandler cgi-script .cgi .pl 19</Directory>
  • AWS・・・EC2,Ubuntu18.04(Debian10),Apache/2.4.29
  • 自宅サーバー・・・Raspberry Pi3,OSMC(Debian9.12),Apache/2.4.25
  • 自宅サーバーのselinuxを一時的にオフにしても変化なし
  • .htaccessのRewriteRuleのオプションを[L,P]から[L]または[L,R]にして普通にリダイレクトさせれば画像が見れる
  • AWSにアクセスして404が返ってきたとき,自宅サーバーのApacheのログには何も記録されていない

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

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

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

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

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

guest

回答1

0

自己解決

リバースプロキシを使うにはApacheのproxyモジュールを有効化する必要があります.

bash

1sudo a2enmod proxy 2sudo a2enmod proxy_http 3sudo systemctl restart apache2

投稿2020/07/12 13:32

編集2021/01/21 01:21
abroad128

総合スコア60

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問