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

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

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

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

282閲覧

【apache】mod_rewriteの設定が読めない

nic_

総合スコア30

Apache

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2019/05/10 08:43

お世話になります。

apacheのmod_rewriteの設定が読めずに困っています。

ブラウザで、下記のアドレスにアクセスした際
https://eg.com/test/img/100.jpg

apacheに下記のような設定があったら、実際にはどこにアクセスされるでしょうか?

RewriteCond %{REQUEST_URI} ^/test/img/(.*) RewriteCond /www/%{SERVER_NAME}/cms/test_img/%1 -f RewriteRule ^/test/img/(.*)$ /www/%{SERVER_NAME}/cms/test_img/$1 [L]

また、実ファイルの存在有無により挙動が変わるそうなのですが
どう変わるかもご教示頂ければ幸甚です。

お手数をおかけしますが、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

自分でデバッグできるようになりましょう。

Apache 2.4 系で mod_rewrite のログを出力させるには
httpd.confに一行書き加えるだけで、mod_rewriteの動作を追える情報がaccess_logに残るようになります。

LogLevel info rewrite:trace8

ドキュメントも読みましょう。
mod_rewrite - Apache HTTP Server Version 2.4

意図としては、
REQUEST_URIがそういう文字列で始まり、
カッコでくくった箇所の文字列を一旦変数保持して、
かつ所定のパスにファイルが存在するのを確認したら
リダイレクトするってことだと思うのですが、
RewriteRule行で絶対パスが記述されているのでそのパスにあるファイルが応答されることになるかと。
RewriteRule行の末尾に[L]があるので、書き換えたらこれ以上評価しないってなりますが。
Lがなければ、続いて記述されるRewriteCondの評価が続きます。

つまり、この条件にヒットしなかった場合に、
さらに後述されるRewriteCondの評価の最後に、
エラーページやログインページへのリダイレクトを記述することが多い気がします。

投稿2019/05/10 08:56

編集2019/05/10 09:19
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nic_

2019/05/10 09:34

m6uさん ご回答ありがとうございます! こちらの環境がapache2.2でしたので手間取りましたが、ログ出力に成功しました。 これはかなり役立ちますね。 ありがとうございます。 私なりの解釈ですが、合っておりますでしょうか? ──────────────────────────────────────────── このURLでアクセスがきたら「https://eg.com/test/img/100.jpg」 > RewriteCond %{REQUEST_URI} ^/test/img/(.*) 「100.jpg」が変数にセットされる。 > RewriteCond /www/%{SERVER_NAME}/cms/test_img/%1 -f 「/www/%{SERVER_NAME}/cms/test_img/」ディレクトリに、「100.jpg」が存在する場合 > RewriteRule ^/test/img/(.*)$ /www/%{SERVER_NAME}/cms/test_img/$1 [L] 「/www/%{SERVER_NAME}/cms/test_img/100.jpg」を返す。 ────────────────────────────────────────────
退会済みユーザー

退会済みユーザー

2019/05/10 09:40

それを意図しているのだろうと察します。(あくまで机上)
nic_

2019/05/10 09:48

ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問