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

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

新規登録して質問してみよう
ただいま回答率
85.39%
.htaccess

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

Q&A

解決済

1回答

246閲覧

.htaccessでのリダイレクトの除外設定について

gksh7

総合スコア41

.htaccess

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

0グッド

0クリップ

投稿2024/03/26 12:42

実現したいこと

301リダイレクトをしようとしていますが、
一部のパラメータが付いているときは、リダイレクトをしないようにしたいです。
今回の場合は、パラメータに?hoge=hogeと付いているときは、リダイレクトしない。という処理を書こうとしています。

発生している問題・分からないこと

下記、記述でリダイレクト除外設定ができるか試みました。

下記のURLだと、リダイレクトされず、期待通りです。
https://www.example.com/fuga/?hoge=hoge

ですが、下記のURLだと、piyoにリダイレクトされてしまいます。
https://www.example.com/fuga/index.html?hoge=hoge

該当のソースコード

RewriteCond %{QUERY_STRING} ^(.*&)?(?:REWRITE_URL)=[^&]*&?(.*)?$ RewriteCond %{QUERY_STRING} !(^|&)hoge=hoge(&|$) RewriteRule ^fuga/$ https://%{HTTP_HOST}/piyo/?%1%2 [R=301,L] RewriteRule ^fuga/index.html$ https://%{HTTP_HOST}/piyo/?%1%2 [R=301,L]

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

/fuga/index.htmlのときにリダイレクトされないようにするには、
どう書いたらいいでしょうか?

ご教示いただけますと助かります。

宜しくお願い致します。

補足

特になし

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

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

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

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

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

guest

回答1

0

ベストアンサー

RewriteRuleは直前のRewriteCondを参照するので、2つ目のRewriteRule実行時にRewriteCondのクエリパラメータが参照されていません。

次のどちらかを試してみてください。挙動としては同じになるはずなので、わかりやすものを採用で良いかと思います。

RewriteRuleごとにRewriteCondを書く

RewriteCond %{QUERY_STRING} ^(.*&)?(?:REWRITE_URL)=[^&]*&?(.*)?$ RewriteCond %{QUERY_STRING} !(^|&)hoge=hoge(&|$) RewriteRule ^fuga/$ https://%{HTTP_HOST}/piyo/?%1%2 [R=301,L] RewriteCond %{QUERY_STRING} ^(.*&)?(?:REWRITE_URL)=[^&]*&?(.*)?$ RewriteCond %{QUERY_STRING} !(^|&)hoge=hoge(&|$) RewriteRule ^fuga/index.html$ https://%{HTTP_HOST}/piyo/?%1%2 [R=301,L]

正規表現でRewriteRuleをまとめる

RewriteCond %{QUERY_STRING} ^(.*&)?(?:REWRITE_URL)=[^&]*&?(.*)?$ RewriteCond %{QUERY_STRING} !(^|&)hoge=hoge(&|$) RewriteRule ^fuga/(index.html)?$ https://%{HTTP_HOST}/piyo/?%1%2 [R=301,L]

投稿2024/03/26 13:01

Eggpan

総合スコア3203

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

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

gksh7

2024/03/26 13:25

ご回答ありがとうございます。 RewriteRuleごとにRewriteCondを書く方法で試したところ、期待通りに動きました。 RewriteRuleは直前のRewriteCondのみを参照するんですね。大変勉強になりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問