Question

J'ai un RewriteMap qui a une liste de domaines à rediriger. À l'heure actuelle, je dois la liste www.foo.com et foo.com sur la carte de réécriture. Je me demandais s'il y avait un moyen d'avoir le contrôle de rewritecond pour les www et non www dans la même ligne.

# Rewrite Map
foo.com file.php
www.foo.com file.php

# modrewrite
RewriteCond ${domainmappings:%{HTTP_HOST}} ^(.+)$ [NC]
RewriteCond %1 !^NOTFOUND$
RewriteRule ^.*$ www.domain.com/%1 [L,R=301]

J'ai essayé de faire des choses comme (www.)% {HTTP_HOST} ou ^ (www.)% {HTTP_HOST}, mais pas de chance.

Était-ce utile?

La solution

Cela devrait le faire:

RewriteCond %{HTTP_HOST} ^(www\.)?(.+)
RewriteCond ${domainmappings:%2} ^(.+)$ [NC]
RewriteRule ^ /%1 [L,R=301]

La première RewriteCond supprimera le préfixe optionnel www.. Le reste est alors utilisée comme paramètre pour la carte de réécriture dans la seconde RewriteCond.

Une carte de réécriture de fichier texte retourne une chaîne vide si aucune correspondance se trouve:

  

Si la clé est trouvée, la construction carte-fonction est remplacée par valeur de remplacement . Si la clé est introuvable, il est substitué par DefaultValue ou par la chaîne vide si aucun DefaultValue a été spécifié.

Donc, si la deuxième condition est remplie (notez le ^(.+)$), une correspondance a été trouvée et %1 contiendra les valeur de remplacement (dans ce cas file.php).

Autres conseils

D'un message ici

http://www.eukhost.com / forums / F15 / simple rewriterule-set-redirect-domain-6570 /

RewriteEngine on
RewriteCond %{HTTP_HOST} ^xyz.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.xyz.com$
RewriteRule ^(.*)$ http://www.xyz.com/test//$1 [R=301,L]

Vous pouvez essayer de faire le www. partie facultative avec ce qui suit:

# Rewrite Map
www.foo.com file.php

# modrewrite

# redirect to www domain always
RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+)$
RewriteRule (.*) http://www\.%1/$1 [L,R=301,QSA)

# redirect following the map
RewriteCond ${domainmappings:%{HTTP_HOST}} ^(.+)$ [NC]
RewriteCond %1 !^NOTFOUND$
RewriteRule ^.*$ www.domain.com/%1 [L,R=301]

Ce serait d'abord rediriger anything.anything à www.anything.anything puis appliquer votre règle à la prochaine requête. Pas trop bien informé des cartes rewrite mais si aucune garantie.

RewriteCond %{HTTPS} off

RewriteCond %{HTTP_HOST} ^domain.com$ [OR]

RewriteCond %{HTTP_HOST} ^www.domain.com$

RewriteRule ^ https://www.domain.com%{REQUEST_URI} [R=301,L]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top