Pregunta

Tengo un RewriteMap que tiene una lista de dominios para redirigir. Actualmente tengo a la lista www.foo.com y foo.com en el mapa de reescritura. Me preguntaba si había una manera de tener el cheque RewriteCond tanto para www y sin www en la misma línea.

# 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]

He intentado hacer las cosas como (www.)% {} HTTP_HOST o ^ (www.)% {} HTTP_HOST pero no hubo suerte.

¿Fue útil?

Solución

This should do it:

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

The first RewriteCond will remove the optional www. prefix. The remainder is then used as parameter for the rewrite map in the second RewriteCond.

A plain text file rewrite map returns an empty string if no match is found:

If the key is found, the map-function construct is substituted by SubstValue. If the key is not found then it is substituted by DefaultValue or by the empty string if no DefaultValue was specified.

So if the second condition is fulfilled (note the ^(.+)$), a match has been found and %1 will contain the SubstValue (in this case file.php).

Otros consejos

From a post here

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]

You can try to make the www. part optional with the following:

# 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]

This would first redirect anything.anything to www.anything.anything and then apply your rule on the next request. Not too knowledgeable with rewrite maps though so no guarantees.

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]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top