Je ne voulais pas que les personnes puissent enregistrer leurs propres sections sur mon site et que ces sections soient leur propre sous-domaine. donc quelqu'un peut enregistrer 'test' et avoir 'test.example.com' se référer à leur site qui serait à dire /site.php?id=1 Alors, comment pourrais-je écrire une règle mod_rewrite pour cela?Utilisation de mod_rewrite pour les sous-domaines
Répondre
mod_rewrite
n'est peut-être pas le meilleur outil pour cela. RewriteRules sont parfaits pour mapper un fichier sur autre chose, mais ce n'était pas vraiment destiné à la recherche de domaine.
Le mieux que vous pouvez faire en utilisant mod_rewrite
est la suivante:
RewriteEngine On
# Skip www.domain.com
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com
RewriteRule ^/(.*)$ site.php?domain=%1&file=$1 [L]
Ce qui est pas vraiment utile. Ce que je recommande de le faire au lieu de vérifier si la valeur de programme HTTP_HOST
en tant que telle:
function get_subdomain() {
if(preg_match('/^([^.]+)\.domain\.com/i', $_SERVER['HTTP_HOST'], $matches))
return $matches[1];
}
Vous pouvez configurer apache pour revendiquer les domaines « spéciaux » dans la configuration apache (par exemple www.mydomain.com, etc.), dans vos conteneurs hôtes virtuels et les autres par défaut à votre premier hôte virtuel. Vous pouvez ensuite réécrire l'URL de base à une application de répartition qui inspecte l'URL et envoie l'utilisateur à la bonne zone.
De Apache 2.0 docs:
Presque toute directive Apache peut aller dans un récipient VirtualHost. La première section VirtualHost est utilisée pour les demandes sans nom de serveur connu.
Mettre le code pour gérer * .mydomain.com dans le premier hôte virtuel:
<VirtualHost *:80>
Servername custom.mydomain.com
DocumentRoot /var/www/html/custom
RewriteEngine on
RewriteRule ^/$ /var/www/cgi-bin/dispatch.cgi [R]
# more configs here
</VirtualHost>
<VirtualHost *:80>
Servername www.mydomain.com
DocumentRoot /var/www/html/homepage
# more configs here
</VirtualHost>
En dispatch.cgi, vérifiez l'URL appelant pour déterminer où l'utilisateur doit aller. Assurez-vous de configurer votre DNS pour accepter tous les sous-domaines.
Espérons que ça aide!
En fait, nous avons utilisé cette technique sans trop de problème pour l'année écoulée. Notre config mod_rewrite ressemble:
RewriteEngine On
RewriteBase/
RewriteCond %{HTTP_HOST} !www.mydomain.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com
RewriteCond %{REQUEST_URI} !admin
RewriteRule (.*) /admin/ [R=301,L]
RewriteRule ^admin(.*)$ hosted/admin/$1 [QSA,L]
Qu'est-ce qui se passe, est que les utilisateurs sont dirigés vers theiraccount.mydomain.com/admin. Nous utilisons ensuite PHP pour identifier la partie compte du nom de domaine. Utiliser quelque chose comme $ _SERVER ['SERVER_NAME'] ou une méthode pour obtenir le nom de domaine et l'analyser fonctionne très bien. Conservez ces configs dans le fichier httpd.conf, cela deviendra un problème de processeur dans les sites à fort trafic s'il est conservé en tant que .htaccess.
- 1. Utilisation d'Apache mod_rewrite pour supprimer les sous-répertoires d'URL
- 2. Utilisation de mod_rewrite pour Mimic SSL Virtual Hosts?
- 3. Utilisation d'Apache mod_rewrite et RewriteMap
- 4. Utilisation de mod_rewrite pour contourner une erreur "certificat SSL invalide"
- 5. écriture mod_rewrite pour les données de formulaire
- 6. Règle mod_rewrite pour couvrir tous les domaines
- 7. Apache mod_rewrite pour intercepter les requêtes XML
- 8. UrlRewriteFilter équivalent pour mod_rewrite
- 9. Dois-je utiliser mod_rewrite pour les URL de mon site?
- 10. mod_rewrite Rediriger les variables de règle question
- 11. Utilisation de MVP - Utilisation correcte des événements pour les tests
- 12. mod_rewrite pour un problème de slash traînant
- 13. apache mod_rewrite pour forcer index.php
- 14. mod_rewrite pour n'importe quel nombre de variables
- 15. Utilisation de divs pour afficher les erreurs
- 16. mod_rewrite pour remplacer les appels à la racine html
- 17. mod_rewrite nouvelle URL pour les pages plus wordpress?
- 18. Utiliser mod_rewrite pour convertir les dossiers à querystring
- 19. Lighttpd mod_rewrite à Apache Mod_rewrite
- 20. Autres problèmes de Mod_rewrite
- 21. comportement indésirable de mod_rewrite
- 22. Utilisation de ProxyPass pour les pages mais pas les images
- 23. mod_rewrite avec des espaces dans les URL
- 24. Comment utiliser mod_rewrite pour un seul fichier?
- 25. passage de variables mod_rewrite
- 26. mod_rewrite question
- 27. mod_rewrite nécessaire
- 28. mod_rewrite help
- 29. règles mod_rewrite
- 30. problème mod_rewrite