Ceci est une ancienne révision du document !
Permet de créer par exemple http://www.monsite.com/doc pointant autre part que le répertoire de base du site
Dans l'exemple ci-dessous on pourra en allant sur http://www.monsite.com/doc voir le contenu de /usr/share/doc
Vérifier que le fichier de configuration apache /etc/httpd/conf/httpd.conf
contienne la ligne suivante :
grep Include /etc/httpd/conf/httpd.conf
Créer par exemple un fichier /etc/httpd/conf.d/doc.conf
et insérer les lignes suivantes :
Alias /doc /usr/share/doc <Directory "/opt/repo"> Options Indexes FollowSymLinks MultiViews Order allow,deny Allow from all AllowOverride None </Directory>
Explication :
Exemple pour apache sous Windows :
alias /doc "C:\documents" <Directory "C:\documents"> Options Indexes MultiViews FollowSymLinks AllowOverride AuthConfig Order deny,allow Allow from all Deny from all </Directory>
Dans l'exemple ci-dessous nous autorisons l'accès http://www.monsite.com/doc uniquement aux adresses locales (127.0.0.0) et au réseau 192.168.20.0 :
Alias /doc "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 192.168.20 </Directory>
Dans l'exemple ci-dessous l'accès à http://www.monsite.com/doc sera restreint par un mot de passe :
Il faut éditer la configuration ainsi :
Alias /doc "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride AuthConfig Order deny,allow Allow from all Deny from all </Directory>
puis créer un fichier /usr/share/doc/.htaccess
avec le contenu suivant :
AuthUserFile "/etc/apache2/.htpasswd" AuthName "Acces /doc Restreint" AuthType Basic require valid-user
Pour terminer il faut créer le fichier mot de passe par la commande suivante :
htpasswd -c /etc/apache2/.htpasswd user
Pour ajouter un autre utilisateur :
htpasswd /etc/apache2/.htpasswd user2
Pour effacer l'utilisateur user2:
htpasswd -D /etc/apache2/.htpasswd user2
Les hébergements virtuels par IP utilisent l'adresse IP de la connexion afin de déterminer quel serveur virtuel doit répondre. Par conséquent, vous devez disposer d'adresses IP différentes pour chaque nom de domaine complet (FQDN) que vous hébergez. Avec un hébergement virtuel par nom, le serveur s'appuit sur les informations transmises par le client dans les en-têtes HTTP de ses requêtes. La technique présentée ici vous permet de disposer de serveurs virtuels différents partagés sur une même adresse IP.
Pour l'activer, nous allons indiquer que les sites virtuels vont écouter sur n'importe quelle IP sur le port 80.
Nous allons éditer le fichier /etc/httpd/conf/httpd.conf et décommenter ou ajouter la ligne suivante :
NameVirtualHost *:80
Nous allons aussi créer un répertoire dans lequel on déposera un fichiers de configuration par site Web. Ajouter la ligne suivante :
Include vhost/*.conf
Créer le répertoire
mkdir /etc/httpd/vhost
Dans cet exemple nous allons 2 sites :
Nous allons créer les répertoires de nos deux sites :
mkdir /var/www/www.siteweb{1,2}.com
Créer et éditer le fichier /etc/httpd/vhost/www.siteweb1.com.conf
et insérer par exemple les lignes suivantes :
<VirtualHost *:80> ServerName www.siteweb1.com ServerAlias www.monsite1.com *.messites1.com ServerAdmin webmaster@localhost DocumentRoot /var/www/www.siteweb1.com DirectoryIndex index.html index.htm index.php <Directory /var/www/www.siteweb1.com> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> </VirtualHost>
Explication :
*:80
doit correspondre exactement à celle saisie pour la directive NameVirtualHost *:80
Faire la même chose pour le second site mais remplacer www.siteweb1.com par www.siteweb2.com
Pour terminer redémarrer apache :
/etc/init.d/httpd restart
Pour tester il faut que les enregistements de www.siteweb1.com et www.siteweb2.com soient effectuer sur un serveur DNS. Si ce n'est pas le cas, la configuration peut être testée en éditant préalablement un fichier nommé hosts
sur votre poste de travail.
C:\WINDOWS\system32\drivers\etc\hosts
/etc/hosts
Ajouter par exemple les lignes suivantes (admettons que l'ip de votre site est 192.168.20.45) :
192.168.20.45 www.siteweb1.com 192.168.20.45 www.siteweb2.com 192.168.20.45 www.montsite1.com 192.168.20.45 www.montsite2.com
Il ne reste plus qu'a créer une page index.html
et tester dans votre navigateur.
Le module mod_rewrite.so doit être chargé au démarrage d'apache et la directive suivante doit être présente pour toute RewriteRules:
RewriteEngine On
N’importe quel caractère : .
N’importe lequel de cette liste de caractères : [abcd]
Tout caractère non compris dans la liste (autre que a, b, c ou d) : [^abcd]
Alternative, soit « blanc », soit « noir » : blanc|noir
Une ou N occurrence(s) de l’expression qui précède (N > 1) : +
Zéro ou N occurrence(s) de l’expression qui précède (N>0) : *
Groupement permettant l’utilisation des références inverses ($1,… $n) : ^
Délimiter une alternative comme dans (blanclnoir) : ^
Ancre de début de ligne : ^
Ancre de fin de ligne : $
[L]: Celui-ci vous semble familier, comme nous l’avons vu dans notre précédent exemple. Il mérite toutefois une précision. Lorsque le module de réécriture est actif, les règles sont lues séquentiellement et l’URL est comparée ligne à ligne avec le premier argument de celles-ci jusqu’à la dernière. Si une réécriture est effectuée, c’est la forme réécrite qui sera utilisée en entrée pour les règles suivantes. Le flag [L] permet de sortir prématurément de la boucle.
Un autre exemple serait, en début d’une liste de règles : Nous introduisons ici un nouveau concept, à savoir un second argument vide (ou presque, car il consiste en un seul caractère « - » ) . Cette règle particulière implique qu’il n’y a pas de réécriture, l’URL étant passée sans modification aucune. Elle signale au serveur Apache de passer toutes les URL d’images gif ou jpg sans réécriture, ni traitement successif.
[R] [R=code]: Dans ces deux formes une redirection est effectuée. Si l’argument code n’est pas précisé, une redirection 302 (déplacé temporairement) est effectuée. Si vous souhaitez faire savoir au navigateur/robot qu’une page a été remplacée définitivement, utiliser le code 301 comme dans : RewriteRule ^ancien\.html$ http://domaine.tld/nouveau.html [R=301,L] Dans ce cas précis, une réécriture “externe” s’impose (utilisation de http://...) Vous voyez ci-dessus que nous avons combiné deux flags en les séparant par une virgule.
[F]: Forbidden - interdit. Retourne un code 403, par exemple : RewriteRule ^secret.html$ - [F] ( pas de réécriture vu le deuxième argument - )
[NC]: NoCase, ou « insensible à la casse ». La règle suivante : RewriteRule ^script\.php$ programme.php [NC,L] S’appliquera aussi bien à script .php, SCRIPT.PHP ou ScRiPt .PhP
[G]: Gone. Cette page n’existe plus et retourne une entête http 410
[N]: Force l’analyse et l’exécution de toutes les règles en repartant du début de la liste. Ici encore, comme expliqué plus haut ([L]), c’est l’URL modifiée après exécution de la dernière règle qui est utilisée en entrée, et non l’URL originelle. Attention aux boucles infinies !!
[C]: Chain, chaînage avec la ou les règles suivantes jusqu’à la première règle ne se terminant pas par [C] Apache interprète ce flag comme suit : s’il y a réécriture (la règle est vérifiée), la règle suivante est exécutée avec la chaîne réécrite en entrée. Si la règle ne se vérifie pas, toutes les règles qui suivent jusqu’à la première ne comportant pas le flag [C] ne sont pas appliquées.
[QSA]: Query String Append. Rajoute le QUERY_STRING à la fin de l’expression, après la réécriture. A réserver pour la dernière règle de réécriture. Utilisée le plus souvent avec le flag [L], comme dans [QSA,L]
Permet d’échapper tout caractère qui suit et lui ôter sa signification particulière, par exemple \. : \
Pour rediriger par exemple http://monsite.com/index.htm vers http://monsite.com/index.html (hors directive <Directory>)
RewriteRule ^/index\.htm$ /index.html [L]
Pour réecrire par exemple http://monsite.com/test/index.htm en http://monsite.com/index.html
<Directory /var/www/test> ... RewriteEngine On RewriteBase / RewriteRule ^index\.htm$ index.html [L] </Directory>
Pour réecrire http://monsite.com/test/uk* et http://monsite.com/test/fr* en http://monsite.com/test/page.htm (* etant toute les pages derrières l'url)
<Directory /var/www/test> ... RewriteEngine On RewriteBase / RewriteRule ^(fr)|(uk)(.*)$ /test/page.htm [L] </Directory>
Pour réecrire par exemple http://nimportequelsite2006.com/ en http://nimportequelsite2007.com/
<Directory /var/www/test> ... RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(.*)2006(.*)$ RewriteRule ^(.*)$ http://%12007%2/test/page.htm [R,L] </Directory>
Nous allons configurer ici apache de façon suivante : Lorsque qu'on tape http://monserveur/siteport8083/
que l'on arrive sur http://10.0.0.2:8083
. Ceci permet de passer par le port 80 du serveur pour atteindre un site sur le port 8083.
Les modules suivant doivent être chargés :
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule rewrite_module modules/mod_rewrite.so
Modifier la configuration apache ainsi:
# Activer les règles de reécriture RewriteEngine on RewriteRule ^/siteport8083(.*) http://10.0.0.2:8083$1 [P,L] # Alias proxy ProxyPass /siteport8083 http://10.0.0.2:8083 ProxyPassReverse /siteport8083 http://10.0.0.2:8083 # Activer le proxy <IfModule mod_proxy.c> ProxyRequests On ProxyVia On </IfModule>