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

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

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

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

Apache

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

Q&A

解決済

1回答

358閲覧

Apacheのhttp.conf内でのMod_rewrite手法(301リダイレクト)

DANGANMARU

総合スコア14

mod_rewrite

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

Apache

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

0グッド

1クリップ

投稿2018/01/23 05:38

Apache、http.conf内でのmod_rewriteの書き方をご教授ください。

希望

https://www.example.co.jp/sample/
へアクセスが来たら、
https://www.example.co.jp/section/test.php
へ飛ばしたいと考えております。
※301リダイレクト

下記を設定したのですが、動作せず。。。
ご指摘頂きたいです。

lang

1<IfModule mod_rewrite.c> 2 RewriteEngine 3 RewriteLog "logs/rewrite_log" 4 RewriteLogLevel 0 5 6 RewriteCond %{REQUEST_URI} ^sample/$ [NC] 7 RewriteRule ^sample/(.*)$ https://www.example.co.jp/section/test.php [L,R=301] 8 9 RewriteCond %{SERVER_PORT} !^443$ [NC] 10 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 11 12</IfModule>

よろしくお願いいたします。

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

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

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

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

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

otn

2018/01/23 05:49

それぞれの行の意味を理解していますか?
DANGANMARU

2018/01/23 05:57

ご回答ありがとう御座います。基本的な意味自体は理解しているつもりですが事足らない部分はお教えいただきたく。RewriteCond %{SERVER_PORT} !^443$ [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] の部分は、すべて443通信以外をすべて443へリダイレクト。RewriteCond %{REQUEST_URI} ^sample/$ [NC] RewriteRule ^sample/(.*)$ https://www\.example\.co\.jp/section/test\.php [L,R=301]の部分の書き方がうまく無いと考えております。
guest

回答1

0

ベストアンサー

RewriteRuleの第一オペランドと違って、%{REQUEST_URI}は先頭の/を含みます。これが引っかからない原因でしょう。

RewriteRuleの第二オペランドに、https://www.example.co.jp/section/test.phpと書くと、https://www.example.co.jp/section/test.phpへじゃなくて、文字通りのhttps://www.example.co.jp/section/test.phpにリダイレクトされるのでリクエストすると「そんなドメイン無い」というエラーになるでしょう。

あと、https://www.example.co.jp/sample/foo.htmlへのリクエストはリダイレクトせずで良いのですか?

投稿2018/01/23 05:59

otn

総合スコア84538

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

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

DANGANMARU

2018/01/23 06:09

細かくありがとう御座います。勉強になります。 つまりは下記のようになる感じでしょうか? ```lang-bash RewriteCond %{REQUEST_URI} ^/sample/$ [NC] RewriteRule ^sample/(.*)$ https://www.example.co.jp/section/test.php [L,R=301] ``` ちなみに上記でも動かずなんです。 /sample/のディレクトリは空で、なにも入っておりません。 ``` https://www.example.co.jp/sample/foo.html ``` へのリクエストに関しては今回は特別必要ない状態です。
otn

2018/01/23 06:46

> ちなみに上記でも動かずなんです。 それはおかしいですね。 念のため、<IfModule mod_rewrite.c> を外してください。 > /sample/のディレクトリは空で、なにも入っておりません。 そもそもRewriteCondは不要で、 RewriteRule ^sample/$ https://www.example.co.jp/section/test.php [L,R=301] の1行で良いです。
DANGANMARU

2018/01/23 08:35

ご回答ありがとうございます。 RewriteCondの行を削除すると、500が帰ってきました。 断念して、結局PHPでリダイレクト処理を挟むことにしました。 引き続き原因分析やテストを繰り返し、ココにご報告させて頂ければと存じます。 otn様本当にお付き合い頂きありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問