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

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

詳細はこちら
.htaccess

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

Q&A

解決済

2回答

908閲覧

htaccessを使用したURLの書き換え方法

pooh-tarou

総合スコア5

.htaccess

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

1グッド

1クリップ

投稿2021/03/16 11:01

編集2021/03/17 10:16

前提・実現したいこと

1.httpからのアクセスをhttpsへ誘導する
2.wwwなしからのアクセスをwwwへ誘導する
3.index.htmlからのアクセスをindex.html無しへ誘導する

発生している問題・エラーメッセージ

A)ロリポップサーバーの .htaccessの書き換えにて、 上記の3つを行うが、404や5xx系エラーになる。
B)index.htmlと同じ階層にあるtest.htmlなどから<a href="./index.html">top</a>へのリンクを貼り付けると、
本サーバーからtopボタンを押したとき、ロリポップのドメインように作ったディレクトリ名フォルダが2回表示されるようになり、必ず404になる。

たとえば、本来https://www.doremi.com/index.htmlが表示されるべきところ、topをクリックすると、
https://www.doremi.com/doremi/doremi/
↑ロリポップサーバーの直下に作ったフォルダ名(ドメイン毎フォルダ)が勝手に2つディレクトリとして表示される現象が発生します。当然doremiの下にdoremiディレクトリはないので、エラー表示になります。
htaccess

該当のソースコード

RewriteEngine On **# index.html無しのURLに統一** RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ https://www.doremi.com/$1 [R=301,L] RewriteEngine On **# www有りのURLに統一** RewriteCond %{HTTP_HOST} ^doremi.com RewriteRule ^(.*) https//www.doremi.com/$1 [R=301,L] RewriteEngine On # httpをhttpsに統一 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

試したこと

ロリポップのマニュアルに従い、
1.「htaccessのパーミッション(属性)を「604」に変更します。 」を644→604へ変更済みです
2.コードの一番最後に改行を入れています。

のほか、自分で

3.ブラウザの更新、キャッシュのクリア、ファイルの上書きを試しました。

以上です。

参照元

ロリポップヘルプより https://lolipop.jp/manual/hp/htaccess-08/ を参考にして記載しました。

###実施環境
iMAC Catalina:10.15.6
Google Chrome: 89.0.4389.82(Official Build)
ロリポップ上に用意されている ブラウザ内のFTPツールをつかってブラウザで.htaccessを開き、直接ファイルを書き換えています。

###【追記3.16.21:07】アドバイスありがとうございます。
※全角のSを修正しました
※コロンが抜けているのを修正しました

→質問1.httpからhttpsへの切り替え
→成功しましたありがとうございます

→質問2.www無し接続
→失敗します。https://www.doremi.com/root/
へ接続され404 notfoundとなります。原因がわかりません。

 →質問3.まだ動作がおかしいです。各ページからリンクされている
<a href="./index.html">をクリックすると今、自分がいるところの上のフォルダつまりrootフォルダを表示させて404になります。(質問2に起因している気がします。) 
index.html,test1~3.html で同様の現象が発生し、
リンクをクリックするとhttps://www.doremi.com/root/
というURLになり、404Error NotFoundになります。

indexとtestはいずれもrootの直下のフォルダです。

root- index.html 
-test1.html 
-test2.html
-test3.html

 

RewriteEngine On RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ https://www.doremi.com/$1 [R=301,L] RewriteEngine On RewriteCond %{HTTP_HOST} ^doremi.com.com RewriteRule ^(.*) https://www.doremi.com/$1 [R=301,L] RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

###解決しました
解決時の設定画面を記録のために載せておきます。
リンク

miyabi_pudding👍を押しています

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

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

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

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

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

guest

回答2

0

少なくとも、全角のsが紛れ込むという間違いがあります。

細かい点でおかしい点はありますが、エラーになって動作しないレベルではないです。

あと、

**# index.html無しのURLに統一**

などは、説明のために加えた行で、実際のファイルには書いてませんよね?書いてたら消しましょう。

投稿2021/03/16 11:13

otn

総合スコア85888

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

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

pooh-tarou

2021/03/16 15:41

アドバイスありがとうございます。 全角・コメント行を削除して修正しました。
otn

2021/03/16 15:52 編集

あー、コロン漏れは見落としてました。 > →失敗します。https://www.doremi.com/root/ > へ接続され404 notfoundとなります。原因がわかりません。 リクエストしたURLは何でしょうか? > indexとtestはいずれもrootの直下のフォルダです。 https://www.doremi.com/root/index.html をリクエストしたら、 https://www.doremi.com/root/ にリダイレクトされて、404になるということですか? 「何のURLをリクエストしたら、どうなる」を客観的に書いてください。
pooh-tarou

2021/03/16 16:21

確かに読み返して 伝わりにくいと感じました申し訳ございません。 再度動作を確認して現象をご報告いたします。 ありがとうございます。
pooh-tarou

2021/03/17 09:57

詳細のお返信をしようとしたところ、現状、症状が改善してしまい、 詳細がわからなくなってしまいました。 情報をうまくお伝えできず、申し訳ございません。 お返事にありましたように、 >https://www.doremi.com/root/index.html >をリクエストしたら、 >https://www.doremi.com/root/ >にリダイレクトされて、404になるということですか? というような報告ができるよう留意いたします。 ご丁寧なアドバイスをどうもありがとうございます。
guest

0

ベストアンサー

# RewriteEngine Onは一回のみの記述でいい RewriteEngine On # RewriteBaseを定義していた方が、処理が安定する(気がする)。おそらく、root/が入るのは、この記述が無かったためと思われる RewriteBase / # なるたけ一つのRewriteRuleにまとめた方がいい(リダイレクト回数は少ない方がいい) # .はメタ記号のため、\でエスケープする # httpの場合、PORTは80 RewriteCond %{SERVER_PORT} 80 # .comが二つ続いていたので除去 RewriteCond %{HTTP_HOST} ^doremi.com # ホストが違う、もしくはhttp://である、をまとめてリライトかける(結果同じことなので) RewriteRule ^(.*)$ https://www.doremi.com%{REQUEST_URI} [R=301,L] # このRewriteCondはいらない # RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ https://www.doremi.com/$1 [R=301,L]

ひとまず、
RewriteEngine Onの記述は一回で大丈夫です。
また、RewriteCondの条件は、
RewriteRuleを走らせた時点で、それ以前のものはクリアになります。

これでもうまくいかなければ、コメントください。

投稿2021/03/16 14:59

編集2021/03/16 15:01
miyabi_takatsuk

総合スコア9555

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

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

pooh-tarou

2021/03/16 15:27

ご丁寧な解説をありがとうございます。 すべての項目をご指示のとおりに書き直したところ、 質問1.2.3がすべて解消いたしました。 ですが。。。。 別の問題が発生してしまいました。 こちらは完全に私の報告わすれなのですが、 root直下に.htaccessをアップロードしています。 そのためなのか? ロリポップに複数のドメインを登録(独自ドメイン)しています。 doremi.comは完全にうまくいったのですが、 もう片方の別のドメインhogeが今度は、同じ現象でindex.htmlを探しに行こうとすると、doremi.com/hoge/という存在しないディレクトリのURLを返すようになってしまい 404errorが発生しました。 うまく伝えられなくて申し訳ないのですが・・。 なお、.htaccessを root/doremi/.htaccessというふうにdoremiフォルダ内に格納してみましたが、 現象は全く変わりませんでした。
miyabi_takatsuk

2021/03/16 15:33

おそらく、ドキュメントルートの設定の関係と思われます。 マイページにて、ドメインの設定などを参照し、 ドキュメントルートの設定の箇所があるかと思いますので、 ドメインごとに、適切なドキュメントルートを設定しましょう。 その上で、LOLIPOPは、初心者向けな面が強いため、 初期の状態だと、.htaccessを、自動的に改変するような設定になっていたりするので、 そこらへんも確認してみてください。 もしかしたら、LOLIPOPに問い合わせ必要かもですね・・・。
pooh-tarou

2021/03/16 15:41

ありがとうございます。 マイページ及び独自ドメイン設定方法のページをしっかり目をとおしてみます。 ざっくり目を通した感じは特に情報がなかったので・・。 https://lolipop.jp/manual/user/chg-plan/ 実は並行してロリポップにも問い合わせ中ですが返事が来ないのでこちらにヘルプした次第でございます。 また進捗をご報告いたします。ありがとうございます。
miyabi_takatsuk

2021/03/16 15:56 編集

あ、理解しました。 doremi.comのドキュメントルート(公開(アップロード)フォルダ)を、 root/doremi/ hogeのドキュメントルートを、 root/hoge/ にしてください。 その上で、.htaccessも含めた、サイトのファイルデータを、該当のドキュメントルートに移動してください。 ドキュメントルートの設定の反映には、一時間少々かかるので、 ドキュメントルートが適用されたかな?ってタイミングで、ファイルの移動をするとよいでしょう。 ドキュメントルートは、”公開(アップロード)フォルダ”のことです。 ドメイン別に、公開(アップロード)フォルダは分けることが可能です。 そうすることによって、同じサーバー上で、複数のドメインのサイトを運用することが可能になるわけです。
miyabi_takatsuk

2021/03/16 16:00 編集

LOLIPOP > マイページ > 独自ドメイン設定 > 各ドメインの確認・変更ボタン と、辿ると、ドキュメントルート(公開(アップロード)フォルダ)を設定する箇所が出ます。 ちなみに、.htaccessは基本的には、ドキュメントルート以下でしか機能しないファイルです。 それより高階層は、Apacheなどのコントロール領域になります。(Apacheは、.htaccessと構文は、同じかと思われる)
pooh-tarou

2021/03/16 16:19

ドキュメントルートはrootではなくてアップロードフォルダを指すのですね! なので複数ドメインを所有する場合、公開フォルダへ.htaccessを格納するのですね! マニュアルの解説・手順まで新設にしていただき大変に感謝申し上げます。。。 また、割と.htaccessを書き換えて更新したあと すぐ動作確認するのも良くなかったようで じっくり待ってから表示を確認したほうが良さそうですね。一時間少々・・・ほんの20秒くらいでチェックしてました・・これも悪かったように思います。 はい、.htaccessの構文を調べるとApacheのサイトにたどり着いたのでこれはApacheなのかーと思いました。一体自分が何を書いてるのかもわからないままにロリポップに従っていました。 公開フォルダへ.htaccessを移動し、しばらく様子を見てみます。 何から何までありがとうございます!
miyabi_takatsuk

2021/03/16 18:24

> 割と.htaccessを書き換えて更新したあと すぐ動作確認するのも良くなかったようで .htaccessはそこまで更新は遅くなりません。 ドキュメントルートの反映が一時間少々かかります。 (サーバー側の処理のため) マイページより、しっかりとドキュメントルートを設定し、 FTPにて、サイトのデータと共に、 .htaccessも置きます。 おそらく、LOLIPOPからも同様の説明がされるかと思われます。
pooh-tarou

2021/03/17 10:17

まずはじめに上記アドバイスにより現象が改善されたことをお礼いたします。 この度はありがとうございます。 ※質問事項の下部に設定画面のキャプチャを載せました。 ※LOLIPOPから回答が届きましたが、.htaccessはサポート外ですという回答でした。  代わりにロリポップからはこちらのサイトを紹介いただきました。  ▼.htaccessを使ったよく使うリダイレクトまとめ | Kana-Lier カナリエ  https://kana-lier.com/web/redirect/
miyabi_takatsuk

2021/03/17 10:20

解決されて何よりです。 よかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問