Définir des URL pour la redirection vers une URL spécifique sans réécriture
Je construis un planificateur Web qui a une structure multi-locataire, ce que j'essaie de faire est d'attribuer une URL personnalisée qui pointe vers mon application à chaque acheteur.
Donc, essentiellement, lorsqu'un utilisateur m'achète une licence, je vais créer une URL personnalisée sur mon serveur Web comme ceci:
http://webserver/foo.scheduler.com/login
où foo
est le nom de l'utilisateur qui a acheté la licence et scheduler
fait partie par défaut de l'url, un autre exemple avec plus d'acheteurs:
http://webserver/foo.scheduler.com/login
http://webserver/foo2.scheduler.com/login
http://webserver/foo3.scheduler.com/login
essentiellement il y a trois acheteurs (mes clients), chaque point de terminaison personnalisé me permet d'identifier les informations d'identification de base de données correctes, car dans ma logique, chaque locataire a une base de données spécifique, pour plus d'organisation des données.
En fait, mon application se trouve sur ce point de terminaison:
http://webserver/scheduler
Je veux savoir s'il est possible de pointer toutes les URL personnalisées vers http://webserver/scheduler
, sans réécrire l'URL dans le navigateur, par exemple, lorsque l'utilisateur va http://webserver/foo.scheduler.com/login
dans le vrai http://webserver/scheduler/login
, mais que l'utilisateur continue de voir http://webserver/foo.scheduler.com/login
.
Comment faire ça? Dans mon .htaccess
, disponible à la racine du dossier de l'application, j'ai ce contenu:
RewriteEngine On
RewriteBase /webscheduler/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
cela me permet de réécrire le chemin de base vers l'index et de shunter la trace vers le contrôleur spécifique.
Heureux de vous aider.
Obtenez un certificat SSL valide pour * .scheduler.com. Vous en aurez besoin si vous voulez que cela fonctionne. Êtes-vous sûr de vouloir utiliser HTTPS? Votre autre URL n'est pas HTTPS. Ensuite, vous devrez configurer votre hôte virtuel pour que * .scheduler.com fonctionne correctement avec ce certificat. Avoir seulement :
<VirtualHost *:443>
ServerAlias *.scheduler.com
DocumentRoot "/var/www/html/progetti/scheduler"
</VirtualHost>
Ça ne va pas être assez. Vous avez besoin de tous les éléments mod_ssl configurés là-dedans, comme avec l'autre hôte virtuel. Vous pouvez simplement utiliser cet hôte HTTPS par défaut au lieu d'en ajouter un autre et le modifier.
La première chose à faire est de faire fonctionner votre hébergement pour https: //*.scheduler.com/, puis de le pointer simplement au bon endroit.
Que voulez-vous dire par votre point de terminaison http://webserver/scheduler
? Ce n'est pas un nom de domaine valide. Veuillez clarifier ce que vous entendez par là et je mettrai à jour ma réponse avec plus d'informations. Le code est-il sur le même serveur?
-
Mise à jour
Donc, pour faire cela sans SSL, ajoutez ce qui suit à votre "000-default.conf", après ce qui s'y trouve actuellement:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.scheduler.com
ServerAlias *.scheduler.com
UseCanonicalName off
DocumentRoot /var/www/html/progetti/scheduler
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html/progetti/scheduler>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
-
Mise à jour
Pour que http: //webserver/foo.scheduler.com fonctionne et serve / scheduler, ajoutez ceci au VirtualHost qui était déjà là. Pas le nouveau ajouté ci-dessus, l'original en haut.
RewriteEngine on
RewriteRule ^(/[^./]+\.scheduler\.com)(?:$|/(.*)$) /scheduler/$2
Faites-moi savoir tout problème. Si vous préférez le mettre dans votre .htaccess, il devra être mis à jour.