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
/hc
which 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