apache2.4 mod_rewriteは特定のエイリアスdirectroy / uriを除外します


11

私の仮想ホストの1つに次の設定があります。

...<VirtualHost *:80>
    ServerName cloud.domain.de
    ServerAdmin webmaster@domain.de
    ServerSignature Off

    Alias "/.well-known/acme-challenge" "/var/www/domain.de/vh-www/htdocs/public/.well-known/acme-challenge"

    <Directory "/var/www/domain.de/vh-www/htdocs/public/.well-known/acme-challenge">
      Require all granted
      ForceType 'text/plain'
    </Directory>

    <ifmodule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %(REQUEST_URI) !/\.well\-known/acme\-challenge/?.*
      RewriteCond %{HTTPS} off
      # RewriteRule ^\.well-known/acme-challenge/([A-Za-z0-9-]+)/?$ - [L]
      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    </ifmodule>...

私が達成したいのは、URLにhttp://cloud.domain.de/.well-known/acme-challenge/アクセスしてもmod_rewriteがURLを書き換えないことです。

私はすでにさまざまな方法を試しましたが、そのうちの1つは上記のコメント化されたRewriteRuleですが、何も機能しないようです。サーバーが毎回httpsに書き換えます。

テスト目的で書き換えを無効にすると、エイリアスURLに問題なくアクセスできます...

特定のURLが書き換えられないようにするにはどうすればよいですか?

回答:


16

そのように:

<ifmodule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</ifmodule>

URIが一致した場合start with /.well-known/acme-challenge/、要求をリダイレクトされません


まず、アドバイスありがとうございます!残念ながら、うまくいきませんでした。あなたが訪問したとき:http://www.server-plant.de/.well-known/acme-challenge/それはまだ書き直されています。(www-サブドメインにも同じRewrriteルールと条件を適用したので、クラウドサブドメインとまったく同じです)
FleBeling

編集:{}の代わりに()RewriteCond %{HTTPS} offがあり、要求されていません
Froggiz

ええ、私は正しいブラケットをチェックせずに盲目的にあなたのものをコピーしましたが、まあ、sh ..が起こります:)これは魅力のように機能し、あなたは他の条件に関しても正しいです。質問が1つ残っています:条件を変更して、後続のすべてにも一致するようにする方法を教えて/ください。したがって、index.htmlなどをキャッチしませんか?
FleBeling

それはすでにリダイレクトされないことstart with /.well-known/acme-challenge/を意味 /.well-known/acme-challenge/anythingするすべてとすでに一致しています
Froggiz

1
RewriteOptions InheritDownApache 2.4.8以降では、書き換え構成をすべての仮想ホストに継承できます。RewriteEngine On各仮想ホスト構成にまだ存在している必要があります。
tobltobs 2017年

3

@mark "短くて​​より堅牢な"バリアントの正しいバージョン:

RewriteCond %{REQUEST_URI} ^/\.well\-known
RewriteRule . - [L]

その下のSSLリダイレクトルールを停止するには、これを追加する素晴らしいです
ジェームズ・タン

2行目の1つのドットが機能しませんでした。それは1つの文字だけに一致し、URLはいくつかの文字で構成されているためですか?代わりに^(。*)$を使用しています。
ジェット

0

私見より短く、より堅牢:

RewriteCond %{REQUEST_URI} ^\.well\-known
RewriteRule - [L]

最終的には/ acme-challenge /を追加したいかもしれませんが、./well-known/testのような任意のファイルでデバッグしたい場合は、このソリューションの方がうまくいきます

実際に何をするか:リクエストが.well-knownで始まるかどうかを調べ、その場合は何もしない(-の意味)。それを最後のルールにする[L]


いいえ。virtualhostsはまだ優先されているようです。「<VirtualHost>セクション内のセクションは、仮想ホスト定義の外側の対応するセクションの後に適用されます。これにより、仮想ホストがメインサーバーの構成をオーバーライドできます。」httpd.apache.org/docs/current/sections.html
Frederick Nord
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.