特定のフォルダの .htaccess リダイレクトを無効にする方法

特定のフォルダの .htaccess リダイレクトを無効にする方法

からまでのすべての URL をリダイレクトするには、次の.htaccessルールを記述します。www.a.comwww.b.com

RewriteEngine on
RewriteCond %{http_host} ^www.a.com [NC,OR]
RewriteCond %{http_host} ^a.com [NC]
RewriteRule ^(.*)$ https://www.b.com/myfolder/ [R=301,NC,L]

現在、 のサブディレクトリの下に、以下のようにファイルがありますa.com

www.a.com/.well-known/acme-challenge/#######

これは AutoSSL の更新に使用されます。上記のリダイレクトにより、AutoSSL はファイルを見つけられなくなり、更新が失敗します。

では、以下のリダイレクトを無効にすることは可能でしょうか/.well-known/acme-challenge/?

答え1

すべてを固定の URL パスにリダイレクトしているので、ディレクティブ内で例外を直接構築することもできますRewriteRule(現在行っているように URL パスをキャプチャする必要はありません)。

例えば:

RewriteCond %{HTTP_HOST} ^(www\.)?a\.com [NC]
RewriteRule !^\.well-known/acme-challenge/ https://www.b.com/myfolder/ [R=301,L]

!の接頭辞RewriteRule パターン式を否定するので、正規表現がない一致します。この場合、要求された URL パスが始まっていません.well-known/acme-challenge/。(ただし、以下の「エッジ ケース」を参照してください。)

私もあなたの2つを組み合わせました条件(ディレクティブ) を 1 つにまとめます。ルール自体にフラグRewriteCondは必要ありません(Windows ではなく Linux を使用している場合)。NC

正規表現内のリテラルドットをバックスラッシュでエスケープすることを忘れないでください。

エッジケース(オプション追加)

ファイルの後半にフロントコントローラパターンがある場合.htaccess(例:WordPress、Joomla、その他のほとんどのフレームワーク/CMSなど)、状態フォームの URL をリクエストするときにフロント コントローラへの書き換えがリダイレクトされるのを防ぐには、上記のルールに を追加します/.well-known/acme-challenge/<non-existent-file>。例:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
:

この条件がない場合、 へのリクエストhttp://a.com/.well-known/acme-challenge/<non-existent-file>は にリダイレクトされますhttps://www.b.com/index.php(index.phpがフロント コントローラーであると想定)。

まとめ

完全なルールは次のようになります。

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} ^(www\.)?a\.com [NC]
RewriteRule !^\.well-known/acme-challenge/ https://www.b.com/myfolder/ [R=301,L]

# Front-controller pattern follows...

アップデート:

リダイレクトが単純な行である場合: redirect 301 / https://www.b.com/myfolder/、 の例外をどのように記述しますか/.well-known/acme-challenge/?

以来、単純 Redirect(mod_alias) ディレクティブ自体は「例外」を作成する機能を提供しないため、ディレクティブを式で囲む必要があります<If>(Apache 2.4 が必要です)。例:

<If "%{REQUEST_URI} !~ m#^/\.well-known/acme-challenge/#">
    Redirect 301 / https://www.b.com/myfolder/
</If>

参照:詳しくはこちら

(Redirectこのようにディレクティブを使用している場合、前述の「フロント コントローラー」パターンや「エッジ ケース」は存在しません。)

余談:似ているように見えるかもしれませんが、このRedirectディレクティブは以前に使用したディレクティブとはまったく異なりRewriteRule、異なる結果を生成します。RewriteRule上記のディレクティブ破棄する要求されたURLパスをリダイレクトし、すべてを にリダイレクトしますhttps://www.b.com/myfolder/。ただし、Redirectここで使用されているディレクティブは保存する要求された URL パス。URL パスの先頭に/myfolder(例:/foo/barにリダイレクトされますhttps://www.b.com/myfolder/foo/bar)を付けます。

関連情報