apache2.4 mod_rewrite belirli takma adı hariç tutma directroy / uri


11

Benim hayaletlerimden birinde aşağıdaki kurulum var:

...<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>...

Ne elde etmek istiyorum, bu mod_rewrite url http://cloud.domain.de/.well-known/acme-challenge/erişildiğinde URL yeniden yazma değildir .

Zaten biri yukarıda yorumlanmış RewriteRule olmak farklı yaklaşımlar denedim, ama hiçbir şey işe yaramaz gibi görünüyor: sunucu her seferinde https için yeniden yazar.

Test amacıyla yeniden yazmayı devre dışı bıraktığımda, takma ad URL'sine erişebilirim ...

Yeniden yazılmayan belirli URL'yi nasıl elde edebilirim?

Yanıtlar:


16

Bunun gibi :

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

URI eşleşmesi start with /.well-known/acme-challenge/istek yeniden yönlendirilmez


İlk olarak, tavsiye için teşekkürler! Ne yazık ki, işe yaramadı. Ziyaret ettiğinizde: http://www.server-plant.de/.well-known/acme-challenge/hala yeniden yazılıyor. (Www-Subdomain'im için aynı Rewrrite Kurallarını ve Koşullarını uyguladım, bu yüzden bulut-Subdomain ile tamamen aynı)
FleBeling

Düzenlendi: {} yerine () vardı ve RewriteCond %{HTTPS} off
zorunlu

Evet, sadece doğru parantezleri kontrol etmeden körü körüne kopyaladım, ama iyi .. olur :) Şimdi çekicilik gibi çalışıyor ve diğer koşulla da haklısın. Sadece bir soru kaldı: Koşulun arkasındaki her şeye uyacak şekilde nasıl değiştirilir /? Yani index.html vb. Yakalamak olmaz?
FleBeling

zaten tüm start with /.well-known/acme-challenge/bu ortalamalarla eşleşmeyecek /.well-known/acme-challenge/anythingde yönlendirilmeyecek
Froggiz

1
Yeniden yazma yapılandırmaları RewriteOptions InheritDownApache 2.4.8'den beri tüm sanal ana bilgisayarlara devralınabilir . RewriteEngine Onher sanal ana bilgisayar yapılandırmasında hala bulunmalıdır.
tobltobs

3

@mark "Daha kısa ve daha sağlam" varyantın doğru sürümü:

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

aşağıdaki ssl yönlendirme kurallarını durdurmak için ekleyerek harika
James Tan

2. satırdaki tek nokta benim için çalışmadı. Sadece bir karakterle eşleştiği ve URL'nin birkaç karakterden oluştuğu için mi? Bunun yerine ^ (. *) $ Kullanıyorum.
Jette

0

IMHO daha kısa ve daha sağlam:

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

sonunda / acme-challenge / eklemek isteyebilirsiniz, ancak ./well-known/test gibi rasgele bir dosyada hata ayıklamak istiyorsanız bu çözüm daha iyi çalışır

gerçekte ne yapar: isteğin .well-bilinen ile başlayıp başlamadığına bakar, bu durumda hiçbir şey (- anlamı) yapmaz ve son kural yapar [L]


Hayır. Sanal ana bilgisayarların hala önceliği var gibi görünüyor. "<VirtualHost> bölümlerinin içindeki bölümler, sanal ana bilgisayar tanımının dışındaki karşılık gelen bölümlerden sonra uygulanır. Bu, sanal ana makinelerin ana sunucu yapılandırmasını geçersiz kılmasına olanak tanır." dan httpd.apache.org/docs/current/sections.html
Frederick Nord
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.