Apache mod_rewrite url reescreve

1

Eu quero reescrever uma URL com o mod_rewrite do link para link (onde o diretório seria direcionado para o diretório / public)

Eu tentei várias coisas, mas não consigo entender. Aqui está minha configuração:

    <VirtualHost xxx.xxx.xxx.xxx:443>
            ServerAdmin [email protected]
            ServerName www.server.com
            DocumentRoot /var/www/server.com

        <Directory /var/www/server.com>
            RewriteEngine on
            RewriteCond %{REQUEST_URI} ^/directory
            RewriteRule ^(.*)$ /directory/public/ [L]
        </Directory>
    </VirtualHost>
    
por Ezeyme 05.12.2011 / 14:28

2 respostas

1

Tente alterar sua regra de reescrita para isso:

RewriteRule ^/directory(.*) /directory/public$1 [NC,L]

Você não precisa do RewriteCond

    
por 22.12.2011 / 20:55
0

Dentro de um contexto <Directory > , os URIs nas regras de regravação não começam com / .

Isso também é verdade para os URIs em regras de regravação em .htaccess arquivos porque eles estão implicitamente em um diretório.

A parte relevante da documentação é intitulada " Re-regravações por diretório "

Para corrigir isso, você pode fazer uma das seguintes opções:

  1. Mova o RewriteRule e o RewriteCond para fora do bloco <Directory > .
  2. Remova a barra inicial do RewriteCond e a segunda parte do RewriteRule.
  3. Siga a sugestão do Ivmisooners, mas também mova o RewriteRule para fora do bloco <Directory > .
  4. Siga a sugestão do Ivmisooners, mas remova as barras iniciais da RewriteRule.

Se fosse minha escolha, usaria a opção 3.

A partir da minha leitura da página de documentação vinculada acima, parece sugerir que você deve ter o Options FollowSymLinks habilitado para que o RewriteRules funcione em um contexto por diretório. Eu nunca testei isso sozinho. Se você tiver problemas para fazer o RewriteRules funcionar dentro desse bloco <Directory > , tente adicionar Options +FollowSymLinks .

    
por 03.01.2012 / 23:34