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

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

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

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

正規表現

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

Q&A

2回答

1718閲覧

正規表現とRewriteCondが動かない理由を教えて下さい。

yaranaika12345

総合スコア11

Apache

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

正規表現

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

0グッド

0クリップ

投稿2021/07/31 03:45

編集2021/07/31 06:50

以下のように書いて、

<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} ^/[^/\s]+(/)*$ RewriteRule ^(.*)$ https://google.com [R=301,L] </IfModule>

以下のgif動画でいうところの、赤字部分のリクエストURLの形のときだけgoogle.comにリダイレクトさせる・・・というのをしたいのですが、

![イメージ説明]
(この動画gifは、https://weblabo.oscasierra.net/tools/regex/で動作させたものです)

RewriteCond に書いている正規表現が間違っているのか、RewriteRule が動いてくれません。

RewriteRule が正常に動作するのは確認済みなので、おそらく正規表現の書き方が間違っていると思うのですが、いくら調べても原因が分かりません。

よろしければご回答のほど、宜しくお願いいたします。

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

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

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

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

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

ohgrkrs

2021/09/02 08:25

手元のCentOS8のApacheにご質問のrewriteの設定をコピペして動かしてみたところでは、 普通にリダイレクトされています。 問題である > RewriteRule が動いてくれません。 という点について、何がどう動かないのか、 具体的な例など追記していただけないでしょうか。 ``` $ curl -v http://localhost/blog/ * Trying ::1... * TCP_NODELAY set * Connected to localhost (::1) port 80 (#0) > GET /blog/ HTTP/1.1 > Host: localhost > User-Agent: curl/7.61.1 > Accept: */* > < HTTP/1.1 301 Moved Permanently < Date: Thu, 02 Sep 2021 08:14:01 GMT < Server: Apache/2.4.37 (centos) OpenSSL/1.1.1g < Location: https://google.com < Content-Length: 226 < Content-Type: text/html; charset=iso-8859-1 < <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="https://google.com">here</a>.</p> </body></html> * Connection #0 to host localhost left intact ```
guest

回答2

0

あまりapacheは詳しくはないので参考意見として…

sedではないので/にエスケープシーケンスは蛇足だと思います。
あと,グループ化を示す「()」は不要ではないですかね。最後も/は0か1文字でいいと思うので,
^/[^/\s]+/?$」のような感じでどうでしょうか?。
もしくは\sが使えないケースも考えて,^/[^/ ]+/?$ も試してみてはいかがでしょうか?

投稿2021/07/31 13:07

ujimushi_sradjp

総合スコア2152

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

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

yaranaika12345

2021/07/31 13:51

回答ありがとうございます! ご指摘どおり、蛇足な点が多かったので修正させていただきました!ありがとうございます! ただ、動作自体は変わらずです???? あと空白文字は使えないようです!
guest

0

これでは、/blog//blogにはマッチしますが、それ以外にはマッチしません。

どんなパスにマッチさせて、どんなパスにマッチさせないのでしょうか?
挙げられている例に全部マッチという条件だけだと、.*で良いですが。

投稿2021/07/31 04:32

編集2021/07/31 04:38
otn

総合スコア85901

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

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

yaranaika12345

2021/07/31 06:44 編集

回答ありがとうございます! 質問文がわかりにくくてすみません。 gif動画にあるように /blog/ や /blog にだけマッチしてほしいのです。(/なんらかの文字/(最後のスラッシュはあってもなくてもよい)という形にだけマッチさせたいのです) なので >>これでは、/blog/や/blogにはマッチしますが、それ以外にはマッチしません。 と仰られているように、まさにそのようにしたいのです! ですが、うまく動作しないのです????
otn

2021/07/31 06:54

5つ書いてあるうちの2つにだけ一致して欲しいと言うことですか? そういう重要なことは質問文に書いてもらう必要があります。 このままでは、どう見ても5つ共にマッチしたいに見えます。 正規表現やその他のリライトの記述は合ってますので、うまく行かないと思っているのは、何か他の原因でしょう。
otn

2021/07/31 06:55

ああ、「赤字部分」と追記したのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問