web-dev-qa-db-fra.com

Utilisez .htaccess pour réécrire n’importe quel sous-domaine dans le sous-répertoire correspondant sans afficher le sous-répertoire

J'ai un petit problème avec mon .htaccess. Par exemple, si je vais à test.example.com, c'est dans le dossier /sub/test. Mais cela montre test.example.com/sub/test. Comment puis-je cacher le chemin après .com? Ou est-il possible de le faire avec Apache, comme tous les dossiers du dossier sub sont des sous-domaines?

Je ne sais pas comment le faire.

J'utilise ceci:

RewriteCond %{HTTP_Host} ^((?!www\.).+?)\.example\.com$ [NC]
RewriteRule ^((?!sub/).*)$ /sub/%1/$1 [L]

EDIT: Je veux créer automatiquement chaque dossier créé dans le dossier sub comme un sous-domaine. Comme l'utilisateur crée un dossier et son sous-domaine.

2
Oggy mot

Supprimer vos règles et juste avoir quelque chose comme:

<VirtualHost IP>
    ServerName test.example.com
    DocumentRoot /whatever/sub/test

(remplacez whatever par le chemin correct et IP par l'adresse IP/le port correspondant en fonction de la configuration de vos hôtes virtuels)

Pour un hôte virtuel dynamique, consultez le module mod_vhost_aliashttp://httpd.Apache.org/docs/2.4/mod/mod_vhost_alias.html ), cité dans la documentation:

For simple name-based virtual hosts you might use the 
following directives in your server configuration file:

UseCanonicalName    Off
VirtualDocumentRoot "/usr/local/Apache/vhosts/%0"

A request for http://www.example.com/directory/file.html will be 
satisfied by the file
/usr/local/Apache/vhosts/www.example.com/directory/file.html.

Sinon, pour vos règles de réécriture, cela peut fonctionner en ajoutant simplement [P] comme indicateur, mais en règle générale, je recommande toujours de trouver des moyens plus simples de faire les choses et d’utiliser la réécriture uniquement si les choses ne peuvent pas être faites autrement (en raison de la complexité il ajoute).

1
Patrick Mevzek