web-dev-qa-db-ja.com

apache2.4 mod_rewrite特定のエイリアスディレクトリ/ uriを除外

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

...<VirtualHost *:80>
    ServerName cloud.domain.de
    ServerAdmin [email protected]
    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/にアクセスします。

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

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

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

11
FleBeling

そのように:

<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/リクエストはリダイレクトされません

16
Froggiz

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

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

IMHOはより短く、より堅牢です:

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

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

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

0
Mark Hofstetter