Apache Rewrite: ¿Cómo escribir una regla basada en el nombre de dominio (en lugar de HTTP_HOST)?

Apache Rewrite: ¿Cómo escribir una regla basada en el nombre de dominio (en lugar de HTTP_HOST)?

He escrito una RewriteRule que funciona sobre la base de HTTP_HOST (www.domainname.com), pero quiero que funcione únicamente sobre la base de la parte del nombre de dominio (domainname.com).

Para aclarar más

La estructura de carpetas es /var/www/domainName.com.

Cuando escribo esta regla en el archivo de configuración de Apache

RewriteRule ^/js/(.*) /%{HTTP_HOST}/js/$1 [L]

y accede al sitio usando www.midominio.com; intenta encontrar la carpeta /var/www/www.domainName.com, que no existe.

Entonces, necesito convertir la regla mencionada anteriormente para eliminar "www" de HTTP_HOST.

Respuesta1

Le sugeriría que redirija las solicitudes en lugar de hacer que el mismo sitio esté disponible en dos lugares. Cree un nuevo VirtualHost para redirigir el tráfico:

<VirtualHost *:80>
    ServerName www.domainName.com
    Redirect / http://domainName.com/
</VirtualHost>

O agregue un conjunto de reglas encima de las demás que detectarán la presencia de www. prefije y redirija al usuario:

RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule /(.*) http://%1/$1 [R,L]

Si realmente desea que su sitio tenga ambos nombres de dominio sin ninguna redirección, puede usar RewriteCond para extraer solo el nombre de dominio, y estará disponible para RewriteRule como %1.

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*) [NC]
RewriteRule ^/js/(.*) /%1/js/$1 [L]

Respuesta2

Dudo que puedas hacer eso, ¿no sería más fácil simplemente crear enlaces a los directorios apropiados?

ln -s yourdomain.com www.yourdomain.com

Respuesta3

¿Has probado a usar %{DOCUMENT_ROOT}?

También es posible, si ha configurado Servernameen su vhost el mismo nombre que usa en su estructura de directorio, por ejemplo:

<VirtualHost *:80>
  DocumentRoot /var/www/domainame.com
  ServerName domainame.com
  ServerAlias www.domainame.com
</VirtualHost>

Luego puedes usarlo %{SERVER_NAME}en tu regla de reescritura.

Respuesta4

Según entiendo tu pregunta, simplemente configura tuRaiz del documentoal directorio correcto:

DocumentRoot /var/www/domainName.com

información relacionada