Você precisa deixar a opção "reescrever" no arquivo de configuração do apache "disponível em sites". Para laravel você deve ter cuidado porque o seu DocumentRoot (pasta pública onde você precisa do arquivo .htaccess) está dentro da pasta do projeto.
Eu tenho o seguinte conteúdo no meu arquivo .htaccess . Eu esperava que ele redirecionasse para minha pasta de projeto /hc , que está no mesmo nível que .htaccess . O redirecionamento não está acontecendo e ainda está exibindo o conteúdo de index.html .
RewriteEngine On
RewriteBase /hc/
<Files .*>
Order Deny,Allow
Deny From All
</Files>
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?/$0 [PT,L,QSA]
Você precisa deixar a opção "reescrever" no arquivo de configuração do apache "disponível em sites". Para laravel você deve ter cuidado porque o seu DocumentRoot (pasta pública onde você precisa do arquivo .htaccess) está dentro da pasta do projeto.
I expected it to redirect to my project folder
/hcwhich is at the same level as.htaccess.
Esse é o problema. Se o arquivo .htaccess estiver no subdiretório /hc , ele nunca verá a solicitação, a menos que você já inclua o subdiretório /hc na solicitação.
Seu arquivo .htaccess precisa estar no diretório pai. ie. a raiz do documento. (Incidentalmente, você só precisaria da diretiva RewriteBase /hc/ se esse arquivo estivesse na raiz do documento.)
Ou inclua um arquivo adicional .htaccess no documento raiz que simplesmente encaminha todas as solicitações para o diretório /hc (seu front controller), por exemplo:
RewriteEngine On
RewriteRule (.*) hc/$1 [L]
Note que como o mod_rewrite não é herdado por padrão, uma vez que o pedido é reescrito no subdiretório /hc , o arquivo .htaccess no subdiretório é então processado e sobrescreve as diretivas mod_rewrite no arquivo pai .htaccess , então você não termina com um loop de reescrita.
RewriteRule .* index.php?/$0 [PT,L,QSA]
UPDATE: A string substituição no último RewriteRule difere da diretiva anterior. Ambos provavelmente não estão corretos. Você pode querer remover o ? na diretiva acima, a menos que você pretenda a nós a string de consulta, então você deve adicionar um ? à diretiva anterior. Tal como está, o primeiro usa informação do caminho para passar o URL, o segundo usa a cadeia de consulta .
Aliás, o sinalizador PT é redundante em arquivos .htaccess por diretório. E se você não estiver usando a string de consulta, o QSA flag também poderá ser removido.
Tags .htaccess mod-rewrite rewrite