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

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

新規登録して質問してみよう
ただいま回答率
85.45%
リダイレクト

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

.htaccess

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

Q&A

解決済

1回答

604閲覧

htaccessについて、最上位URLからの一部リダイレクトの除外について

yowa_yowa_man_z

総合スコア14

リダイレクト

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

.htaccess

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

0グッド

0クリップ

投稿2023/02/28 06:55

前提

https://hogehoge.com/
の中に
aa1
aa2
というフォルダと
bb.html
bb.jpg
がある場合

実現したいこと

1.
https://hogehoge.com/

http://hogehoge.com/
をアクセスしたときに
https://hogehoge.com/aa1/
に飛ばしてくれてかつ、

2.
https://hogehoge.com/bb.html
https://hogehoge.com/bb.jpg
https://hogehoge.com/aa2
にアクセスした場合はリダイレクトしない
.htaccessの書き方を知りたい。

該当のソースコード

https://hogehoge.com/
の直下に下記の内容の.htaccessを置きました。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^hogehoge.com$
RewriteRule ^(.*)$ https://hogehoge.com/aa1/$1 [R=302,L]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

試したこと

1だけの条件なら上のコードで行けるのですが、
2の条件を加味した方法がわからず(全部リダイレクトされてしまう)
アドバイスいただければと思います。

また、
https://hogehoge.com/aa2/

https://hogehoge.com/aa1/
にリダイレクトするなどURLの指定先が狭められる条件だと難しくない気がするのですが
最上位URL?という言い方が正しいのかわかりませんが、
https://hogehoge.com/
からリダイレクトとなると全部がリダイレクト対象になってしまい苦戦しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

https://hogehoge.com/http://hogehoge.com/ をアクセスしたときに https://hogehoge.com/aa1/ に飛ばしてくれてかつ、

というのが実は不完全な説明で、
https://hogehoge.com/~http://hogehoge.com/~ をアクセスしたときに https://hogehoge.com/aa1/~ に飛ばしてくれてかつ、」
と言うことなのでしょうかね。

除外するなら、RewriteCondで除外します。
なお、hogehoge.comというのは他人のドメインだと思うので勝手に使わないようにしましょう。

Apache

1RewriteEngine On 2RewriteCond %{HTTP_HOST} ^example\.com$ 3RewriteCond %{REQUEST_URI} !^/(aa1(/|$)|bb\.html$|bb\.jpg$|aa2) 4RewriteRule ^(.*)$ /aa1/$1 [R=302,L] 5 6RewriteCond %{HTTPS} off 7RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

/aa2がファイルなのかディレクトリなのか不明なので、その部分はぼんやり書いてます。

/aa1/~も除外しておかないと、https://example.com/https://example.com/aa1/https://example.com/aa1/aa1/https://example.com/aa1/aa1/aa1/とリダイレクトし続ける気がしますが、大丈夫だったのでしょうか?

追記

いえ、ピンポイントで https://hogehoge.com/ http://hogehoge.com/ だけを https://hogehoge.com/aa1/ に飛ばしてほしいのです。

ということなので。
その場合は、簡単です。パスの/以降が空の時だけリダイレクトすれば良いので、

Apache

1RewriteEngine On 2RewriteCond %{HTTP_HOST} ^example\.com$ 3RewriteRule ^$ /aa1/ [R=302,L] 4 5RewriteCond %{HTTPS} off 6RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

投稿2023/02/28 07:46

編集2023/02/28 10:59
otn

総合スコア84835

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

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

yowa_yowa_man_z

2023/02/28 08:00

>というのが実は不完全な説明で、 >「https://hogehoge.com/~http://hogehoge.com/~ をアクセスしたときに https://hogehoge.com/aa1/~ に飛ばしてくれてかつ、」 >と言うことなのでしょうかね。 いえ、ピンポイントで https://hogehoge.com/ http://hogehoge.com/ だけを https://hogehoge.com/aa1/ に飛ばしてほしいのです。 そしてそれ以外のURLはリダイレクトしてほしくないです。 ・・と書けばよかったですね。 ※ hogehoge.comの所有様はサンプルURLに使っていいとhogehoge.comに記載していただいております。 aa2はフォルダです。前提に記載させていただいております。 /aa1/も除外しておかないと… はそのとおりでして、その除外の仕方もわかってなくてそれも込みで質問していたつもりでした。
otn

2023/02/28 10:55

> いえ、ピンポイントで なんと、そうなんですね。 > 1だけの条件なら上のコードで行けるのですが、 とお書きなので、それを信じました。 追記しておきます。 > ※ hogehoge.comの所有様はサンプルURLに使っていいとhogehoge.comに記載していただいております。 へえ。それは知りませんでした。
yowa_yowa_man_z

2023/03/01 08:37

追記頂いたコードで無事、こちらが想定していた通りの挙動になってくれました! ありがとうございます!感謝いたします!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.45%

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

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

質問する

関連した質問