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

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

詳細はこちら
リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

Q&A

解決済

1回答

1013閲覧

.htaccessでリダイレクト転送元を複数設定する場合の記述方法

samiA

総合スコア13

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

0グッド

1クリップ

投稿2019/11/06 00:45

編集2019/11/06 01:55

いつも大変お世話になっております。

標題の通り、.htaccessでリダイレクト転送元を複数設定する場合の記述方法についてご教授頂きたく質問致しました。

###希望する実装結果
ディレクトリA直下の①②を
ディレクトリAの中のディレクトリAAの④(index.html)にリダイレクト

[ディレクトリA]
.  ┣index.html…① 【11/6 10:27修正】
.  ┣piyo.html…②
.  ┣.htaccess
.  ┗[ディレクトリAA]
.    ┣index.html…④
.    ┣xxxx.html

【11/6 10:53追記↓】

http://www.test.com/A/index.html もしくは
http://www.test.com/A/piyo.html にアクセスした際、
http://www.test.com/A/AA/index.html にリダイレクトする

###自分で実装した結果

ディレクトリA内に以下の記述をした.htaccessを設置

RewriteEngine on RewriteCond %{THE_REQUEST} ^.*/index.html  **【11/6 10:27修正】** RewriteRule ^(.*)index.html$ http://www.test.jp/A/AA/index.html$1 [L,R=301] RewriteEngine on RewriteCond %{THE_REQUEST} ^.*/piyo.html RewriteRule ^(.*)index.html$ http://www.test.jp/A/AA/index.html$1 [L,R=301]

上記の記述だと、index.html **【11/6 10:27修正】**はAA/index.htmlに飛ばされるのですが
piyo.htmlは飛ばされませんでした。

私に知識がない状況で緊急の依頼ということで困り果てていました。
どなたかお力をお貸し頂けないでしょうか。

以上、よろしくお願い致します。

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

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

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

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

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

Y.H.

2019/11/06 01:44

具体的にリクエストのURLとリダイレクト先のURLを記載ください。 質問記載のものをそのまま解釈すると >RewriteCond %{THE_REQUEST} ^.*/hoge.html >RewriteRule ^(.*)index.html$ http://www.example.com/A/AA/index.html$1 [L,R=301] これだと http://www.example.com/A/index.html?hoge.htmlhttp://www.example.com/A/AA/index.htmlhoge.html とか http://www.example.com/A/hoge.htmlindex.htmlhttp://www.example.com/A/AA/index.htmlhoge.html こうなりますが認識合ってますか?
guest

回答1

0

ベストアンサー

RewriteEngine on RewriteCond %{REQUEST_URI} ^.*/hoge.html$ [OR] RewriteCond %{REQUEST_URI} ^.*/piyo.html$ RewriteRule ^(.*)$ http://www.test.jp/A/AA/index.html [L,R=301]

こんな感じ?

ちなみに増やすならこんな感じ

RewriteEngine on RewriteCond %{REQUEST_URI} ^.*/hoge.html$ [OR] RewriteCond %{REQUEST_URI} ^.*/piyo.html$ [OR] RewriteCond %{REQUEST_URI} ^.*/boe.html$ [OR] RewriteCond %{REQUEST_URI} ^.*/pipi.html$ [OR] RewriteCond %{REQUEST_URI} ^.*/chunchun.html$ RewriteRule ^(.*)$ http://www.test.jp/A/AA/index.html [L,R=301]

投稿2019/11/06 01:21

編集2019/11/06 01:25
kyoya0819

総合スコア10429

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

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

kyoya0819

2019/11/06 01:25

URL内の大文字と小文字は区別しないように設定しているので設定したい場合は [OR]ではなく[OR,NC]に変えてください。
samiA

2019/11/06 01:26

ご回答ありがとうございます。 上記の方法ですと、hoge.htmlはうまくいくのですが、 piyoのほうは404エラーを吐いてしましました。 リダイレクト先が http://www.test.jp/A/AA/piyo.html というURLになってしまうようです・・・。
kyoya0819

2019/11/06 01:28 編集

えっとリダイレクトする先はどのようなURLなのですか? A/AA/index.html/piyo.html と A/AA/index.html/hoge.html ですか? どう言った感じですか?
kyoya0819

2019/11/06 01:29

それとも両方ともindex.htmlにリダイレクトしたいのですか?
samiA

2019/11/06 01:29

リダイレクト先は共に A/AA/index.html です。
kyoya0819

2019/11/06 01:31 編集

誤字があったので10:22にコードを修正していますが最新のコードでしょうか? 当方環境では正常に動くことを確認できています。
samiA

2019/11/06 01:33

RewriteEngine on RewriteCond %{REQUEST_URI} ^.*/hoge.html$ [OR] RewriteCond %{REQUEST_URI} ^.*/piyo.html$ RewriteRule ^(.*)$ http://www.test.jp/A/AA/index.html [L,R=301] 最新と思われる上記のコードを使用して試してみましたが、 同様に The requested URL /A/AA/piyo.html was not found on this server. というエラーが出てしまいます。
samiA

2019/11/06 01:35

念のためですが、 RewriteCond %{REQUEST_URI} ^.*/hoge.html$ [OR]を削除したうえで試してみても 同様のエラーを吐くので、piyo.htmlの行に問題があるのでしょうか・・・
kyoya0819

2019/11/06 01:36

.htaccess内に他の記述はされていますか?
samiA

2019/11/06 01:40

.htaccess内には 前部に、phpをincするための <Files ~ ".(htaccess|htpasswd)$"> deny from all </Files> AddType application/x-httpd-php .php .html AddHandler application/x-httpd-php .php .html を記述しております。 URLアクセスしてみましたが、 「このサイトにアクセスできませんwww.test.jp のサーバーの IP アドレスが見つかりませんでした。」 のエラーコメントです。
samiA

2019/11/06 01:41

ちなみに・・・ php incのコードは削除した上で試しております。
kyoya0819

2019/11/06 01:42 編集

先ほど提示したURLですがアクセスした際、URL欄をご覧ください。 そもそもwww.test.jpが存在しないのでエラーが出るのは正常の動作です。
kyoya0819

2019/11/06 01:48

効果あるかわかりませんが RewriteCond %{REQUEST_URI} ^.*/piyo.html$ [OR] RewriteCond %{REQUEST_URI} ^.*/hoge.html$ だとどうなりますか?
samiA

2019/11/06 01:57

変わらず The requested URL /A/AA/piyo.html was not found on this server. のエラーが吐き出されます。
kyoya0819

2019/11/06 01:59

piyoのファイル名等を変えてみるとどうなりますか?
samiA

2019/11/06 02:03

ファイル名を変更することはできない(既に他方面からのリンクがあるため)ので 別のファイルをpiyoと同様にリダイレクトさせてみるとうまく行きました! ということはコードの不備はないということですね。 piyo.htmlのソース内に何かあるのでしょうか・・・確認してみます。 お時間・お手間とらせてしまい申し訳ございません。
kyoya0819

2019/11/06 02:05 編集

ちょっとモヤモヤしますね、 質問を編集していただくとより多くの方から意見をいただけると思います。 解決できず申し訳ございません。 引き続き当方でも情報を探していきます。
Y.H.

2019/11/06 02:13

今時点の /A/.htaccessを確認ください。 以下以外の記述が存在しませんか? または、/A/AA/.htaccessが存在しませんか? <Files ~ ".(htaccess|htpasswd)$"> deny from all </Files> AddType application/x-httpd-php .php .html AddHandler application/x-httpd-php .php .html RewriteEngine on RewriteCond %{REQUEST_URI} ^.*/piyo.html$ [OR] RewriteCond %{REQUEST_URI} ^.*/hoge.html$ RewriteRule ^(.*)$ http://www.test.jp/A/AA/index.html [L,R=301]
samiA

2019/11/06 02:17

別部署の方に一度確認してもらったところ、リダイレクトできているよとのことでした。 わたしのほうではまだ確認できていないのですが (キャッシュクリア、PC再起動しても確認できません;;) とりあえず外部からの確認は問題ないようです。 貴重なお時間割いていただいたのにもかかわらず 腑に落ちない解決?で申し訳ございません。 ひとまず締めさせて頂きたいと思います。 何度もやり取りして頂き、ありがとうございました。 具体的なURLの提示など質問段階ですべきところご指摘頂いて 次回の質問の参考になりました。ありがとうございます。
kyoya0819

2019/11/06 02:19

Y.H.さん ご指摘ありがとうございます。 samiAさん ひとまず解決したようで何よりです。
samiA

2019/11/06 02:20

Y.H.様 >または、/A/AA/.htaccessが存在しませんか? index.htmlをディレクトリ名で表示させるための.htaccessが存在しております。 それが原因だったのでしょうか? にしてはなぜ特定のファイル名のみリダイレクトが効かなかったのか・・・ 疑問が残るところです・・。
kyoya0819

2019/11/06 02:22 編集

何でもなかったです
Y.H.

2019/11/06 02:28

proxyサーバー通してる環境ならproxyでキャッシュしてる可能性もあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問