Por que as regras do .htaccess não estão funcionando no Linux (Ubuntu 14.04)?

2

Eu copiei um site da minha máquina Windows executando o WAMP para uma máquina Linux com uma pilha LAMP padrão.

Tudo está funcionando bem, além das regras no .htaccess. Eu confirmei que o .htaccess está funcionando testando uma regra simples, então eu sei que não tem nada a ver com a configuração do apache. Essas regras funcionam absolutamente bem na minha máquina windows.

Aqui está uma cópia das regras do meu arquivo .htaccess.

RewriteRule ^admin/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/$ index.php?admin=1&class=$1&id=$2&method=$3 [L,QSA]
RewriteRule ^admin/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/$ index.php?admin=1&class=$1&method=$2 [L,QSA]
RewriteRule ^(.*)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/$ index.php?class=$1&id=$2&method=$3 [L,QSA]
RewriteRule ^admin/([A-Za-z0-9-]+)/$ index.php?admin=1&class=$1 [L,QSA]
RewriteRule ^(.*)/([A-Za-z0-9-]+)/$ index.php?class=$1&method=$2 [L,QSA]
RewriteRule ^download/([A-Za-z0-9-]+.*) index.php?class=downloads&method=download&target=$1 [L,QSA]
RewriteRule ^stream/([A-Za-z0-9-+]+.*) index.php?class=downloads&method=download&target=$1 [L,QSA]
RewriteRule ^(.*)/$ index.php?class=$1 [L,QSA]

Existe algum motivo para que isso não funcione no Linux.

EDITAR:

O URL que estou solicitando é http://domain.com/access , então criei esta regra RewriteRule access index.php?class=access , o que funciona.

    
por Pedroson 26.01.2017 / 13:06

2 respostas

1

The URL I am requesting is http://example.com/access ...

Nenhuma das regras que você publicou corresponderia a essa solicitação. A última regra requer uma barra final, então http://example.com/access/ (com uma barra à direita) deve funcionar bem.

Para criar a barra final opcional , você pode alterar a última regra para:

RewriteRule ^(.*)/?$ index.php?class=$1 [L,QSA]

Observe que o padrão RewriteRule simplesmente mudou de ^(.*)/$ para ^(.*)/?$ - o ? torna opcional o caractere / grupo precedente. Se a barra final não for necessária, remova-a.

    
por 26.01.2017 / 13:48
2

Por padrão, o apache tem AllowOverride desativado, você precisa editar a configuração do apache no arquivo /etc/apache2/apache2.conf para ativar

Encontre

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None

e altere AllowOverride None para AllowOverride All

Ou adicione ao arquivo de configuração virtualhost

<Directory /path/to/virtualhost/site>
  AllowOverride All
</Directory>

Você também precisa ativar o mod de reescrita se você não tiver ativado

a2enmod rewrite
    
por 26.01.2017 / 13:41