J'ai des problèmes avec le choix d'un répertoire par nom d'hôte HTTP.

J'ai une structure de fichiers comme celle-ci:

.
+-- .htaccess
+-- domains
    +-- 123456.a12.whatever.net
    |   +-- .htaccess
    |   +-- ...
    +-- example.org
    |   +-- .htaccess
    |   +-- ...
    +-- subdomain.example.org
        +-- index.html

Le fichier .htaccess dans le répertoire racine ressemble à ceci:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)(.*)$
RewriteRule (.*) %{REQUEST_SCHEME}://%2/$1 [R=301,L]

RewriteCond %{DOCUMENT_ROOT}/domains/%{HTTP_HOST} !-d
RewriteRule (.*) $1 [R=404,L]

RewriteCond %{DOCUMENT_ROOT}/domains/%{HTTP_HOST} -d
RewriteRule (.*) domains/%{HTTP_HOST}/$1 [DPI]

Ce qui est étrange, c'est que cela fonctionne à la fois pour 123456.a12.whatever.net et example.org mais pas pour subdomain.example.org. Lorsque j'essaie d'y accéder, j'obtiens 500 Erreur de serveur interne. Je suis sûr que c'est un problème avec le .htaccess car dans le subdomain.example.org n'est vraiment que le index.html. En outre, l'erreur semble être dans la dernière ligne.

2
Petr Fiedler 16 sept. 2020 à 23:11

2 réponses

Meilleure réponse

Vous pouvez en fait le simplifier davantage en utilisant cette règle de condition négative:

RewriteRule !^domains/ domains/%{HTTP_HOST}%{REQUEST_URI} [L,NC]
1
anubhava 17 sept. 2020 à 06:22

En jouant avec chez l'hôte local, j'ai découvert qu'il commençait à rouler pour une raison quelconque. Le journal dit:

[core:error] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://subdomain.example.org/
[core:debug] AH00121: r->uri = /domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/favicon.ico, referer: http://subdomain.example.org/
[core:debug] AH00122: redirected from r->uri = /domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/domains/subdomain.example.org/favicon.ico, referer: http://subdomain.example.org/
...
[core:debug] AH00122: redirected from r->uri = /domains/subdomain.example.org/favicon.ico, referer: http://subdomain.example.org/
[core:debug] AH00122: redirected from r->uri = /favicon.ico, referer: http://subdomain.example.org/

Même si je ne sais pas pourquoi ça boucle, j'ai trouvé deux solutions différentes.

Solution 1 - Corrigez le .htaccess

Je pense que la solution la plus correcte est celle suggérée par @anubhava. Il suffit de changer la dernière ligne en RewriteRule !^domains/ domains/%{HTTP_HOST}%{REQUEST_URI} et je pense que c'est en fait plus correct.

Solution 2 - Créez un .htaccess

Étrangement, une autre solution est d'ajouter .htaccess contenant la directive RewriteEngine On dans le subdomain.example.org. Je pense que c'est la raison pour laquelle les autres domaines ont fonctionné. Je ne connais pas la raison exacte de cela, mais cela fonctionne.

1
Petr Fiedler 17 sept. 2020 à 19:05