Puncte:1

Consolidarea multor VirtualHosts într-un singur bloc, este aceasta o sarcină pentru SetEnvIf?

drapel dj

Editați | × Cred că ceea ce am nevoie aici este SetEnvIf

Încerc să-mi consolidez toate portul-80 VirtualHosts într-un singur bloc pentru comoditate, dar mă confrunt cu ultima piesă a puzzle-ului.

Toate vhost-urile portului 80 acceptă a www și non-www conexiune la /.cunoscut/acme-challenge/. Toate celelalte solicitări 301 la https://example.com/ - nu www.

Cred că trebuie să mă întorc %{HTTP_HOST} intr-o Definivariabilă capabilă minus posibilul „www”, de exemplu. ${SITE}.

Sau poate există o cale mai bună?

Aici sunt până acum:

<VirtualHost ${IP1}:80>
    Define SITE hmmm
    ServerName example-1.com
    ServerAlias www.example-1.com
    ServerAlias example-2.com
    ServerAlias www.example-2.com
    # And so on... 25 vhosts
    DocumentRoot /home/user/htdocs/${SITE}

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule ^ https://${SITE}%{REQUEST_URI} [NE,R=301,L]

    <Directory /home/user/htdocs/${SITE}>
        Options FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
Puncte:1
drapel kz

Cred că ceea ce am nevoie aici este SetEnvIf

Dar, AFAIK, nu poți folosi mediu inconjurator variabile în DocumentRoot și <Directory> directive. (Și nu poți Defini variabile într-un șir calculat/dinamic folosind un regex.)

DocumentRoot /home/user/htdocs/${SITE}

RewriteEngine activat
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule ^ https://${SITE}%{REQUEST_URI} [NE,R=301,L]

<Director /home/user/htdocs/${SITE}>

În schimb, ai putea defini un VirtualDocumentRoot și utilizați un regex adecvat în directivele mod_rewrite și <DirectoryMatch> recipient.

De exemplu, presupunând că toate domeniile dvs. sunt de formă <name>.<tld> apoi încercați următoarele în loc de subsetul de directive de mai sus:

VirtualDocumentRoot „/home/user/htdocs/%-2.0.%-1.0”

RewriteEngine activat
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+?)\.?$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [NE,R=301,L]

<DirectoryMatch „/home/user/htdocs/[^.]+\.com”>

The %-2.0.%-1.0 parte a VirtualDocumentRoot directiva captează numele de domeniu și TLD (ultimele 2 părți) din numele gazdă solicitat. Important este că acest lucru exclude un subdomeniu www opțional (a treia parte din dreapta).

The %1 backreference în RewriteRule substituţie șirul face referire la partea din numele gazdei mai puțin opționalul www. prefix (subdomeniu) capturat în precedentul CondPattern. (Acest lucru exclude, de asemenea, punctul final în cazul unui FQDN.)

The <DirectoryMatch> directiva permite accesul la orice director care este de forma /home/user/htdocs/<example>.com.

Referinţă:

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.