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

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

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

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

Q&A

解決済

2回答

254閲覧

特定のパターンで文字列が並ぶURLをすべてリダイレクトしたいです

Euri_K

総合スコア32

.htaccess

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

0グッド

0クリップ

投稿2023/10/03 03:38

実現したいこと

https://aaa.com/?(半角英数2文字)=(不特定多数のランダム文字列)
で、構成されているURLを判定し、htaccessで全てトップページへリダイレクトさせたいです。
「?(半角英数2文字)=」の部分を判定し、
そこから後ろが何文字あっても全てリダイレクト対象となるよう設定したい状態です。

前提

サーバーはさくらインターネット、
サイトはWORDPRESSです。
WPのインストールフォルダにあるhtaccessファイルの先頭に
リダイレクトさせるための記述を追加しました。

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

記述自体が無視されています。
サイトが閲覧できなくなるといったエラーは出ていません。

該当のソースコード

2種類試しましたが、いずれも無視されています。

RewriteEngine On RewriteRule ^[a-zA-Z0-9]{2}=$ / [R=301,L]
RewriteEngine On RewriteCond %{QUERY_STRING} ^[a-zA-Z0-9]{2}=$ RewriteRule ^ / [R=301,L]

よろしくお願いします。

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

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

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

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

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

guest

回答2

1

Apache

1RewriteEngine On 2RewriteCond %{QUERY_STRING} ^[a-zA-Z0-9]{2}= 3RewriteRule ^ /? [R=301,L]

でしょうか。^[a-zA-Z0-9]{2}=$は、クエリー部分が=で終わるという意味になります。
正規表現を使うのに、記号の意味を調べなかったのでしょうか??

また、リダイレクト先にクエリー部を書かない場合は、元のクエリー部分がそのまま引き継がれます。
http://example.com/abc?aa=123=>http://example.com/?aa=123=>http://example.com/?aa=123=>以下同
こっちは経験しないと気づけない。
引き継ぎたくない場合は、?だけ書いて、空のクエリー部を指定します。ブラウザには?が無い状態で返されます。

あと、R=301と恒久的リダイレクトにしちゃってるので、リダイレクト設定を修正してテストするごとにブラウザキャッシュのクリアが必要なケースがあります。

投稿2023/10/03 04:19

otn

総合スコア84232

Euri_K👍を押しています

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

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

Euri_K

2023/10/03 04:36

htaccessや正規表現については正直詳しくなく、「$1」のような使い方のことを先に知っていたため、$の意味を勘違いしていた事によるミスです。初歩的な誤りで申し訳ないです。 空のクエリを送らないと引き継がれるというのも初めて知りました。ありがとうございます。
guest

1

ベストアンサー

正規表現の $ は「文字列の終端」という意味なので、「URLが英数2文字のあと = で、そこでURLが終わる」という条件になってしまってます。$ を消しましょう。

投稿2023/10/03 03:46

int32_t

総合スコア20520

Euri_K👍を押しています

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

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

Euri_K

2023/10/03 03:56

それぞれ$を外した場合、 RewriteEngine On RewriteRule ^[a-zA-Z0-9]{2}= / [R=301,L] とした場合は無視され、 RewriteEngine On RewriteCond %{QUERY_STRING} ^[a-zA-Z0-9]{2}= RewriteRule ^ / [R=301,L] とした場合はリダイレクトループが発生しサイトが見られなくなりました…
int32_t

2023/10/03 04:08

前者はおそらくパターンが ^? か ^/? で始まる必要があって、 両者ともデフォルトではクエリがコピーされるので、転送先を /? とする必要があります。
Euri_K

2023/10/03 04:37

かなり初歩的なつまづきですみません。 空のクエリを送らないと引き継がれるというのも初めて知りました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

同じタグがついた質問を見る

.htaccess

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