web-dev-qa-db-fra.com

définition de règles de réécriture dans le fichier httpd.config sur le serveur hôte

Je suis un nouveau webmaster. Je prévois d'héberger mon site web sur un serveur dédié. Le site Web comporte trois TLD: .com, .ma et .fr.

J'ai quelques directives de réécriture dans mon fichier .htaccess qui forcent le format de l'URL à http://example.com avec ce code:

RewriteCond %{HTTP_Host} !^$
RewriteCond %{HTTP_Host} ^(www\.)(.+) [OR]
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_Host} ^(www\.)?(.+)
RewriteRule ^ http://%2%{REQUEST_URI} [R=301,L]

Plus d'autres règles. Je souhaite placer certaines de ces règles, notamment le format de l'URL dans le fichier httpd.conf, mais je ne sais pas quoi écrire dans ServerName et ServerAlias, car j'ai trois ServerNames: example.com, example.ma et example.fr. De plus, si un utilisateur omet www ou l'ajoute, il s'agit d'un nouveau nom de serveur. Comment définir ces règles dans httpd.conf et sous quel nom de serveur?

1
ZeSoft

Juste pour clarifier l'utilisation ... vous ne pouvez avoir qu'une directive ServerName. Si vous en avez plusieurs, la dernière directive remplace simplement la précédente. Cependant, vous pouvez avoir plusieurs directives ServerAlias. En termes de résolution du nom de domaine demandé (c’est-à-dire que vous demandez www.example.ma et que le serveur est en mesure de le faire correspondre), peu importe que www.example.ma soit défini comme étant le ServerName ou un ServerAlias - le serveur trouvera la même chose.

La ServerName ne définit pas uniquement le nom d'hôte, elle peut également définir le schéma et le numéro de port. Alors que, ServerAlias ne définit qu'un nom d'hôte. Étant donné que, dans votre cas, tous ces domaines semblent utiliser le même schéma et le même port, peu importe. (Si vous aviez des schémas et des ports différents, vous définiriez quand même des hôtes virtuels distincts et chacun aurait son propre ServerName - vous pouvez toujours le faire.)

La valeur fournie à ServerName peut également être utilisée pour construire des URL de redirection auto-référentielles. Cependant, ce n'est pas le comportement par défaut (vous devez définir explicitement UseCanonicalName On). Et si vous avez plusieurs domaines, vous voudrez probablement le laisser comme valeur par défaut. Par défaut, il utilisera le nom d'hôte de la requête (c'est-à-dire HTTP_Host).

De plus: Je suppose que ces trois domaines pointent tous vers la même zone du système de fichiers, exécutent les mêmes scripts et partagent des fichiers journaux? Une configuration de serveur unique ou VirtualHost. Sinon, vous pouvez envisager de définir des hôtes virtuels distincts pour chaque domaine.

Donc, après avoir dit tout cela, le domaine que vous définissez comme ServerName et les domaines que vous définissez comme ServerAlias importent peu. Cependant, vous devez choisir un hôte en tant que ServerName. Pour moi, la logique serait example.com (le gTLD et no-www). Les domaines ccTLD, ainsi que les variantes www, seraient définis comme suit: ServerAlias.

Par exemple:

<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAlias example.ma www.example.ma
ServerAlias example.fr www.example.fr
UseCanonicalName Off
:

Votre redirection mod_rewrite fonctionnerait sans changement dans le contexte VirtualHost ou .htaccess.


Cependant, légère digression ...

RewriteCond %{HTTPS} on 
:
RewriteRule ^ http://%2%{REQUEST_URI} [R=301,L]

... pourquoi redirigez-vous de HTTPS vers HTTP?! Si quelque chose devrait être l'inverse. Il n'y a aucune bonne raison de rediriger de HTTPS vers HTTP en 2017. Pour que cela fonctionne même, les certificats SSL doivent être installés de toute façon!


PDATE:

je veux rediriger vers un seul domaine afin qu'il ne soit pas considéré comme dupliqué par SEO

Cependant, si vous voulez canoniser le nom de domaine et tout rediriger vers example.com, vous le feriez légèrement différemment de ce qui précède. Votre code mod_rewrite actuel ne le fait pas.

Au lieu de cela, vous définiriez deux conteneurs <VirtualHost>, un pour votre domaine canonique et un pour tous les autres. Puis utilisez un simple mod_alias Redirect dans votre domaine canonique (pas mod_rewrite).

Par exemple:

<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.ma www.example.ma
ServerAlias example.fr www.example.fr

# Redirect everything to the canonical domain
Redirect / http://example.com/
:

<VirtualHost *:80>
ServerName example.com
UseCanonicalName On
:
2
MrWhite