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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

リダイレクト

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

正規表現

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

.htaccess

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

Q&A

解決済

2回答

313閲覧

htaccessファイルを使ってサブディレクトリを使用したサイトのwwwを無しに統一する

saekoaaa

総合スコア5

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

リダイレクト

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

正規表現

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

.htaccess

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

0グッド

0クリップ

投稿2023/10/30 09:39

編集2023/11/02 10:19

実現したいこと

htaccessファイルを使ってサブディレクトリを使用したサイトのwwwを無しに統一する
https://www.hogehoge.net/example/
にアクセスしたときに、
https://hogehoge.net/example/
にリダイレクトする

前提

※初心者です
www無しのリダイレクトをかけたいと思い、試行錯誤して最終的にうまくいったけど、なぜうまくいったのかわからないので納得いかない
メインサイトのURL→https://hogehoge.net/
サブディレクトリを使用したサイトのURL→https://hogehoge.net/example/
https://www.hogehoge.net/example/
にアクセスしたときに、
https://hogehoge.net/example/
にリダイレクトしたい

試したこと

①htaccessファイルに以下を記述した
※¥は本当はバックスラッシュです。質問したら非表示になったのでこのように書きました。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www¥.hogehoge¥.net/example/
RewriteRule ^(.*)$ https://hogehoge.net/example/$1 [R=301,L]

②うまくリダイレクトが効かないので、いろいろ試していると以下の記述でうまくいった

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.hogehoge.net$
RewriteRule ^(.*)$ https://hogehoge.net/example/$1 [R=301,L]

③上記に対する疑問点
・正規表現ではドット(.)は「¥.」と記述すると覚えていたのですが、そう記述するとうまくいかず、普通に.で書いたらうまくいったのはなぜでしょうか。※¥は本当はバックスラッシュです。

・②の記述の場合、https://hogehoge.net/example/
だけでなく
https://www.hogehoge.net
にアクセスしたときにも
https://hogehoge.net/example/
にリダイレクトされてしまうのでは?と思ったがそうならなかったのはなぜなのでしょうか。

初心者質問で申し訳ありませんが、お力添えいただいただきたいです。

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

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

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

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

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

guest

回答2

0

③上記に対する疑問点
・正規表現ではドット(.)は「¥.」と記述すると覚えていたのですが、そう記述するとうまくいかず、普通に.で書いたらうまくいったのはなぜでしょうか。※¥は本当はバックスラッシュです。

勘違いでしょう。
RewriteCond %{HTTP_HOST} ^www\.hogehoge\.net$
は、https://www.hogehoge.net/example/のホスト名に一致します。
間違えて半角じゃなくて全角のバックスラッシュを書いたとかですかね?
( \ がバックスラッシュに見えるか円マークに見えるかはフォント次第なので同一視します)

・②の記述の場合、https://hogehoge.net/example/ だけでなく https://www.hogehoge.net
にアクセスしたときにも https://hogehoge.net/example/ にリダイレクトされてしまうのでは?と思ったがそうならなかったのはなぜなのでしょうか。

勘違いでしょう。
②の記述だと、
https://hogehoge.net/example/ ⇒ リダイレクトされない
https://www.hogehoge.nethttps://hogehoge.net/example/にリダイレクト

「勘違い」というか、おそらく.htaccessを変更する都度、ブラウザのキャッシュをクリアーしていないので、前の情報が残っているのではないかと思います。ブラウザはR=301のリダイレクト情報(恒久的リダイレクト)をキャッシュするので、リダイレクト記述を変更した都度ブラウザキャッシュのクリアーが必要です。
試行錯誤中にそんなことは面倒すぎるので、普通はR=301じゃなくてRだけ書きます。301を書かないと302(一時的リダイレクト)と見なされて、リクエストの都度.htaccessを見ます。テストが終わってリダイレクト記述が完成した場合に、サーバー負荷軽減のためにブラウザにキャッシュして欲しいと思うのならR=301に変えます。

https://www.hogehoge.net/example/~~~だけhttps://hogehoge.net/example/~~~にリダイレクトしたい場合は、ドキュメントルートの.htaccessに書く場合は、

Apache

1RewriteEngine on 2RewriteCond %{HTTP_HOST} ^www\.hogehoge\.net$ 3RewriteRule ^example/(.*)$ https://hogehoge.net/example/$1 [R=301,L]

です。

なお、

RewriteCond %{HTTP_HOST} ^www¥.hogehoge¥.net/example/

%{HTTP_HOST}は「ホスト名」です。まさか、www.hogehoge.net/example/全体がホスト名だと思ったわけではないと思うのですが。

投稿2023/10/30 15:15

編集2023/10/31 01:24
otn

総合スコア84264

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

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

saekoaaa

2023/11/02 01:19

ご回答ありがとうございました。
guest

0

ベストアンサー

①の方は右辺が
^www¥.hogehoge¥.net/example/ となっています。 HTTP_HOSTはホスト名が入りますので、 /template/ といったディレクトリは含まれません。

②の方はドットが「任意の一文字とマッチ」することによって一致しています。
^www.hogehoge.net$ ですと、www.hogehoge.net にマッチしますが、 wwwwhogehoge.net のような関係ない文字列もマッチします。

ですので該当行は下記のようにするのがより正しいでしょう。

RewriteCond %{HTTP_HOST} ^www\.hogehoge\.net$

投稿2023/10/30 14:42

Eggpan

総合スコア2562

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

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

saekoaaa

2023/11/02 01:19

ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問