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

1

Eu escrevi um RewriteRule que funciona com base no HTTP_HOST (www.domainname.com), mas eu quero que ele funcione apenas com base na parte do nome de domínio (domainname.com).

Para esclarecer mais

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 acessar o site usando www.mydomain.com - ele tenta encontrar a pasta /var/www/www.domainName.com , que não existe.

Então, eu preciso converter a regra mencionada acima para remover o "www" do HTTP_HOST.

    
por Deepak Mittal 24.01.2010 / 13:34

4 respostas

3

Sugiro que você redirecione solicitações em vez de disponibilizar o mesmo site em dois lugares. 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á 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 quiser o seu site em ambos os nomes de domínio sem qualquer redirecionamento, você pode usar um RewriteCond para retirar apenas o nome de domínio, e ele estará disponível para o RewriteRule como% 1.

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

Eu duvido que você possa fazer isso, não seria mais fácil apenas criar links para diretórios apropriados?

ln -s yourdomain.com www.yourdomain.com
    
por 24.01.2010 / 13:42
1

Você já tentou usar %{DOCUMENT_ROOT} ?

Também é possível, se você tiver definido Servername em seu vhost com o mesmo nome que você usa em sua estrutura de diretório, 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.

    
por 24.01.2010 / 14:41
0

Se bem entendi sua pergunta, basta definir o DocumentRoot no diretório correto:

DocumentRoot /var/www/domainName.com
    
por 24.01.2010 / 13:52