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

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

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

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

.htaccess

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

Q&A

解決済

2回答

1679閲覧

あるディレクトリを除外しリダイレクト

sakura-shi

総合スコア93

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

.htaccess

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

0グッド

0クリップ

投稿2020/05/18 08:36

編集2020/05/18 12:37

やりたいこと
.htaccessのrewiteを使用し、同じドメイン内である画面すべてを特定のページ(/gate)へリダイレクトをしたい
ただしhoge1,hoge2 ディレクトリ以下はすべてリダイレクトしない。除外する。
除外ディレクトリ以下以外はすべて/gateへリダイレクトしたい

条件
・同一ドメイン内
・URLは、末尾にスラッシュがついているもの、そうでないもの、パラメータがあるもの
混在している
・https使用

やってみたこと1

RewriteCond %{REQUEST_URI} !(^/hoge1) RewriteRule ^$ /gate [R=301,L] RewriteCond %{REQUEST_URI} !(^/hoge2) RewriteRule ^$ /gate [R=301,L] RewriteEngine On RewriteBase /

やってみたこと2

RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !(^/hoge1) [OR] RewriteCond %{REQUEST_URI} !(^/hoge2) RewriteRule ^$ /gate [R=301,L]

現在のところ,やってみたこと1,2とも以下の結果となりました

1)除外ディレクトリ以外でもパラメータを持っているURLは/gate へリダイレクトしない
2)URLの末尾にスラッシュがついている場合は/gateへリダイレクトしない

1,2を解消するには、.htaccessをどのように書き換えるのがよいでしょうか?

よろしくお願いします

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/05/18 09:31 編集

RewriteCond の行に [AND] をつけて、2行目のRewriteRuleは行削除すればどうだろうか? ちなみに、RewriteEngine OnとかRewriteBaseとかは最初の行に書くべきでは。 文法的なものは http://httpd.apache.org/docs/current/mod/mod_rewrite.html
sakura-shi

2020/05/18 12:34

ありがとうございます。 そのとおりやってみたのですが、結果は同じでした。 スラッシュのないURLはリダイレクトされず、パラメータをもっているURLもリダイレクトされないという結果でした。 RewriteEngine OnとかRewriteBaseも先頭に移動しました。 どこが良くないのか、かなり調べたのですがかいけつしないです。
guest

回答2

0

自己解決

解決しません。。。。。

投稿2020/05/18 15:00

sakura-shi

総合スコア93

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

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

0

RewriteRule ^$ /gate [R=301,L]^$はURLのパス部分が「空」、つまりトップページですよ。

Apache

1RewriteEngine On 2RewriteCond %{REQUEST_URI} !^/hoge1(/|$) 3RewriteCond %{REQUEST_URI} !^/hoge2(/|$) 4RewriteCond %{REQUEST_URI} !^/gate$ 5RewriteRule ^ /gate [R=301,L]

パラメーターがあった場合、削除したいなら、

Apache

1RewriteRule ^ /gate? [R=301,L]

です。

#追記
/gateがディレクトリの場合は、自動的に/gate/gate/のリダイレクトが掛かるので、上記ではループします。
ちゃんと、/を付けて、

Apache

1RewriteEngine On 2RewriteCond %{REQUEST_URI} !^/hoge1(/|$) 3RewriteCond %{REQUEST_URI} !^/hoge2(/|$) 4RewriteCond %{REQUEST_URI} !^/gate/$ 5RewriteRule ^ /gate/ [R=301,L]

のように書く必要があります。

投稿2020/05/18 09:36

編集2020/05/19 03:08
otn

総合スコア84538

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

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

sakura-shi

2020/05/18 13:05

ありがとうございます やってみたのでしが、ループしてしまいました。 アドレスバーはたしかに/gateにはなりますが。。。。 どうしたらいいでしょうか? なんパターンか調べたのですが、やはり URLにパラメータがある場合/gateへリダイレクトしない URL末尾のスラッシュの有無に左右される 解決しません
otn

2020/05/18 13:09

ああ、/gateの場合も除外しないとループしますね。 質問文をそのままコードにしただけなので。 更新しておきます。
sakura-shi

2020/05/18 13:36

ありがとうございます。 が、やはり/gateとアドレスバーはなるのですがループします。 また、2つのディレクトリはまったく除外されなくなりました。 解決策ありますか?
otn

2020/05/18 13:45

ブラウザキャッシュのクリアしてますか?
sakura-shi

2020/05/18 13:58 編集

してます 念のため別のブラウザでも試しています がループします それからパラメータがあった場合、削除したいのではなくパラメータの有無に関わりなく/gateへリダイレクトしたいのです。アドレスバーだけみると/gateになりますが、実際はループしてまったくブラウズできません。除外ディレクトリもループの表示になっています
otn

2020/05/18 14:10

過去の質問でうまく行かないというケースで複数例あったのは、「質問文に書いてない他のリダイレクト指定があった」というケースですね。
sakura-shi

2020/05/18 14:34

それは今の場合ありません。
otn

2020/05/18 15:31

もしかして /gate はファイルでは無くてディレクトリ? 「特定のページ」なのでファイル前提でしたが、もしディレクトリなら、2箇所の /gate を /gate/ に変更してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問