Apache Rewrite: Como escrever uma regra baseada no nome de domínio (em vez de HTTP_HOST)?

Apache Rewrite: Como escrever uma regra baseada no nome de domínio (em vez de HTTP_HOST)?

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 Servernameem 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

informação relacionada