Eu escrevi um RewriteRule que funciona com base em HTTP_HOST (www.domainname.com), mas quero que funcione apenas com base na parte do nome de domínio (domainname.com).
Para esclarecer melhor
A estrutura da pasta é /var/www/domainName.com
.
Quando escrevo esta regra no arquivo conf do Apache
RewriteRule ^/js/(.*) /%{HTTP_HOST}/js/$1 [L]
e acesse o site usando www.mydomain.com - ele tenta encontrar a pasta /var/www/www.domainName.com
, que não existe.
Portanto, preciso converter a regra mencionada acima para remover o “www” do HTTP_HOST.
Responder1
Sugiro que você redirecione as solicitações em vez de disponibilizar o mesmo site em dois locais. Crie um novo VirtualHost para redirecionar o tráfego:
<VirtualHost *:80>
ServerName www.domainName.com
Redirect / http://domainName.com/
</VirtualHost>
Ou adicione um conjunto de regras acima das outras que detectarão a presença do www. prefixar e redirecionar o usuário:
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule /(.*) http://%1/$1 [R,L]
Se você realmente deseja que seu site tenha ambos os nomes de domínio sem qualquer redirecionamento, você pode usar um RewriteCond para extrair apenas o nome de domínio e ele estará disponível para RewriteRule como% 1.
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*) [NC]
RewriteRule ^/js/(.*) /%1/js/$1 [L]
Responder2
Duvido que você consiga fazer isso, não seria mais fácil apenas criar links para diretórios apropriados?
ln -s yourdomain.com www.yourdomain.com
Responder3
Você já tentou usar %{DOCUMENT_ROOT}
?
Também é possível, se você tiver definido Servername
em seu vhost o mesmo nome usado em sua estrutura de diretórios, por exemplo:
<VirtualHost *:80>
DocumentRoot /var/www/domainame.com
ServerName domainame.com
ServerAlias www.domainame.com
</VirtualHost>
Então você pode usar %{SERVER_NAME}
em sua regra de reescrita.
Responder4
pelo que entendi sua pergunta, basta definir seuDocumentRootpara o diretório certo:
DocumentRoot /var/www/domainName.com