Nous avons besoin que tout domaine .org
redirige vers le document root du domaine .net
Je suppose que vous voulez dire "réécrire", par opposition à une redirection externe, comme le code dans votre question ? (Vous avez également inversé la direction de la réécriture requise, comme indiqué dans votre question, mais de toute façon, je vais suivre ce que vous avez indiqué dans les commentaires... de .org
à `.net)
Cela suppose que vous n'avez que des TLD (domaines de premier niveau) simples, comme mentionné dans votre code (par exemple .net
, .me
, .info
, .org
, etc.) et non pas des "TLD" multi-niveaux comme .co.uk
.
RewriteCond %{HTTP_HOST} !^[^.]+\.abc\.net [NC]
RewriteCond %{HTTP_HOST} !^[^.]+\.example\.me [NC]
RewriteCond %{HTTP_HOST} !^[^.]+\.mysite\.info [NC]
RewriteCond %{HTTP_HOST} !^[^.]+\.xyz\.org [NC]
RewriteCond %{HTTP_HOST} !\.internal$ [NC]
RewriteCond %{REQUEST_URI} !^/collateral/ [NC]
RewriteRule ^(.+) /var/www/domains/%{HTTP_HOST}/httpdocs/%{HTTP_HOST}/$1
Essayez quelque chose comme ce qui suit à la place :
# Si l'un de ces domaines est requis, arrêtez
RewriteCond %{HTTP_HOST} ^[^.]+\.abc\.net [NC,OR]
RewriteCond %{HTTP_HOST} ^[^.]+\.example\.me [NC,OR]
RewriteCond %{HTTP_HOST} ^[^.]+\.mysite\.info [NC,OR]
RewriteCond %{HTTP_HOST} ^[^.]+\.xyz\.org [NC,OR]
RewriteCond %{HTTP_HOST} \.internal$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/collateral/ [NC]
RewriteRule ^ - [L]
# Divisez le hôte demandé en HOSTNAME + TLD (variables d'environnement)
RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+)\.([^.]+)
RewriteRule ^ - [E=HOSTNAME:%1,E=TLD:%2]
# Changez le TLD "org" en "net"
RewriteCond %{ENV:TLD} =org [NC]
RewriteRule ^ - [E=TLD:net]
RewriteRule (.+) /var/www/domains/%{ENV:HOSTNAME}.%{ENV:TLD}/httpdocs/%{ENV:HOSTNAME}.%{ENV:TLD}/$1 [L]
Le premier bloc de directives inverse vos conditions actuelles. Cela signifie que s'il s'agit d'une demande pour l'un de "ces domaines", alors arrêtez le traitement, au lieu de... réécrire uniquement lorsque la demande ne correspond pas à l'un de "ces domaines". Cela rend les règles suivantes plus simples, car nous savons maintenant que l'hôte demandé est celui que nous voulons réécrire, nous n'avons donc pas besoin de parsemer le code d'autres conditions.
Nous divisons ensuite l' HTTP_HOST
demandé en le hostname (sous-domaine + domaine) et le tld seulement. Et les stockons dans deux variables d'environnement : HOSTNAME
et TLD
respectivement.
Nous testons ensuite la variable d'environnement TLD
et la changeons si nécessaire (c'est-à-dire de org
à net
).
Et enfin, il y a une réécriture inconditionnelle vers le document root et le sous-répertoire appropriés (en utilisant les variables d'environnement assignées ci-dessus), comme dans votre code. Notez que vous avez mentionné simplement "document root" dans votre description, mais votre code inclut également un sous-répertoire du même nom, donc j'ai inclus le sous-répertoire également.
Cela suppose que les directives mod_rewrite mentionnées dans votre question sont complètes. C'est-à-dire qu'il n'y a pas d'autres directives dépendantes plus loin dans la configuration ? J'ai ajouté le drapeau L
par mesure de précaution.
0 votes
Pouvez-vous clarifier vos exemples de noms d'hôtes. Le code que vous avez publié exclut spécifiquement les noms d'hôtes de la forme
sub.abc.net
etsub.xyz.org
, donc ce n'est pas ce code qui fait cette réécriture, comme vous semblez le suggérer? De plus, ce code réécrit vers un sous-répertoire de la racine du document, pas seulement la racine du document, comme vous l'indiquez? Avez-vous seulement un domaine.net
? La solution peut-elle être spécifique à ce domaine, ou avez-vous besoin d'une solution pour n'importe quel domaine.net
?1 votes
Salut M. White, Merci pour votre réponse. Nous avons besoin que tout domaine en .org redirige vers le document racine du domaine en .net