apache2.4 mod_rewrite esclude alias specifico directroy / uri


11

Ho la seguente configurazione su uno dei miei vhosts:

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

Quello che voglio ottenere è che mod_rewrite non riscriva l'URL quando http://cloud.domain.de/.well-known/acme-challenge/si accede all'URL .

Ho già provato approcci diversi, uno dei quali è la RewriteRule commentata sopra, ma nulla sembra funzionare: il server lo riscrive in https ogni volta.

Quando disabilito la riscrittura a scopo di test, posso accedere all'URL dell'alias bene ...

Come posso ottenere che l'URL specifico non venga riscritto?

Risposte:


16

Come quello :

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

Se l'URI corrisponde, start with /.well-known/acme-challenge/la richiesta non verrà reindirizzata


Innanzitutto, grazie per il tuo consiglio! Sfortunatamente, non ha funzionato. Quando visiti: http://www.server-plant.de/.well-known/acme-challenge/viene ancora riscritto. (Ho applicato le stesse regole e condizioni di riscrittura per il mio sottodominio www, quindi è esattamente lo stesso del sottodominio cloud)
FleBeling,

A cura di: c'era () invece di {} e RewriteCond %{HTTPS} offnon è richiesto
Froggiz il

Sì, ho appena copiato ciecamente il tuo senza cercare le parentesi giuste, ma beh, succede .. ora :) Funziona come un incantesimo e hai ragione anche riguardo alle altre condizioni. Rimane solo una domanda: come modificare la condizione in modo che corrisponda anche a tutto ciò che sta dietro al trailing /? Quindi non catturerebbe index.html e così via?
FleBeling,

corrisponde già a tutto start with /.well-known/acme-challenge/ciò che significa /.well-known/acme-challenge/anythingche non verrà reindirizzato troppo
Froggiz,

1
Le configurazioni di riscrittura possono essere ereditate da tutti gli host virtuali con RewriteOptions InheritDownApache 2.4.8. RewriteEngine Ondeve essere ancora presente in ogni configurazione dell'host virtuale.
tobltobs,

3

@mark Versione corretta della variante "più corta e più robusta":

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

aggiungere questo per fermare le regole di reindirizzamento ssl di seguito è fantastico
James Tan

Il singolo punto nella riga 2 non ha funzionato per me. È perché corrisponde a un solo carattere e l'URL è composto da più caratteri? Invece sto usando ^ (. *) $.
Jette,

0

IMHO più corto e più robusto:

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

potresti voler aggiungere / acme-challenge / eventualmente, ma se desideri eseguirne il debug con un file arbitrario, come ./well-known/test questa soluzione funziona meglio

cosa fa effettivamente: guarda se la richiesta inizia con .well-known, in quel caso non fa nulla (il significato di -) e ne fa l'ultima regola [L]


no. I virtual host sembrano ancora avere la precedenza. "Le sezioni all'interno delle sezioni <VirtualHost> vengono applicate dopo le sezioni corrispondenti al di fuori della definizione dell'host virtuale. Ciò consente agli host virtuali di sovrascrivere la configurazione del server principale." da httpd.apache.org/docs/current/sections.html
Frederick Nord
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.