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 Servername
en 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