.htaccessを下位フォルダに置いたらリダイレクトが利かなくなった


知ってれば当たり前、初歩的な内容なのですが。
誤った場所に .htaccessのリダイレクト処理を置いて、他のリダイレクト処理が利かなくなってしまいました。
つまり、今まで表示されていたページが表示されなくなるという障害を起こしてしまいました。

原因

.htaccessの影響範囲を誤って理解したため

・親ディレクトリの設定は、子ディレクトリにも有効
・一つ.htaccessを設置すると、その下にぶら下がる全ディレクトリに影響が及ぶ
ネットで検索するとでてくる.htaccessの影響範囲の説明

このことから
①上位ディレクトリでリダイレクト処理を書く
②下位ディレクトリでも別の内容のリダイレクト処理を書く
①②両方OKになるのと勘違いしていまいした。

今回の障害事例

①redirect/test/A/Cへのアクセスはすべて https://yahoo.co.jp 
にリダイレクトされます。
www直下の.htaccessには以下の記述がありました。

WWW直下の.htaccess

RewriteEngine on
RewriteRule redirect/test/A/C https://yahoo.co.jp [L,R=301]

②新たに
redirect/test/Bへのアクセスはすべて https://google.co.jp へリダイレクトする処理を追加します。
www直下の.htaccessを触って真っ白になるのが嫌だったので
www/rediret/test直下の.htaccessを新たに作成し以下の記述をしました。
ネットで検索するとでてくる
「親ディレクトリの設定は、子ディレクトリにも有効」
などの言葉を誤って解釈していたのでここで悲劇が起こりました。

www/rediret/test直下の.htaccess
RewriteEngine on
RewriteRule B https://google.co.jp [L,R=301]

③redirect/test/A/Cから https://yahoo.co.jp
へのリダイレクトが利かなくなった

解決①

リダイレクト処理はwww直下の.htaccessに追記

www直下の.htaccess
RewriteEngine on
RewriteRule redirect/test/A/C https://yahoo.co.jp [L,R=301]
RewriteRule redirect/test/A/B https://google.co.jp [L,R=301

解決②

www/rediret/test直下の.htaccessに親ディレクトリのリダイレクト処理をだぶって書く

RewriteEngine on
RewriteRule B https://google.co.jp [L,R=301]
RewriteRule A/C https://yahoo.co.jp [L,R=301]

.htaccessのリダイレクト処理(RewriteRule)は追記ではなく上書き

今回だと、
www/rediret/test直下に.htaccessを置いて、リダイレクト処理(RewriteRule)の記述をしたので
www/rediret/test以下のリダイレクト処理は上書きされたのです。
つまり、www直下の.htaccessに記述したwww/rediret/testフォルダへのリダイレクト処理は上書きで消えてしまったのです。

これを解決するには
①www/rediret/test/.htaccessに上位ディレクトリのRewriteRuleをもう一度書く
②上位ディレクトリの.htaccessにRewriteRuleに追記する
のどちらかになります。
参考↓
適用のされ方Apache公式サイト説明

※実は以前にも同じような依頼があって
www直下の.htaccessを触りたくなかったので下位ディレクトリに.htaccessを作成しリダイレクト処理を書いてました。
たまたまwww直下の.htaccessに該当フォルダへのRewriteRuleがなかったのでうまくいってただけのようです。
次からは要注意です。
というかサイト作成に何一つかかわっていないのに、.htaccessの作成だけ丸投げされるのは怖いです。