Eu tenho o seguinte conteúdo em meu .htaccess
arquivo. Eu esperava que ele fosse redirecionado para a pasta do meu projeto, /hc
que está no mesmo nível do .htaccess
. O redirecionamento não está acontecendo e ainda está exibindo o conteúdo do arquivo 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]
Responder1
Eu esperava que ele fosse redirecionado para a pasta do meu projeto,
/hc
que éno mesmo nível que.htaccess
.
Esse é o problema. Se o .htaccess
arquivo estiver no /hc
subdiretório, ele nunca verá a solicitação, a menos que você já inclua o /hc
subdiretório na solicitação.
Seu .htaccess
arquivo precisa estar no diretório pai. ou seja. a raiz do documento. (Aliás, você só precisaria da RewriteBase /hc/
diretiva se esse arquivo estivesse na raiz do documento.)
Ou inclua umadicional .htaccess
arquivo na raiz do documento que simplesmente encaminha todas as solicitações para o seu /hc
diretório (seu front controller), por exemplo:
RewriteEngine On
RewriteRule (.*) hc/$1 [L]
Observe que como mod_rewrite não é herdado por padrão, uma vez que a solicitação é reescrita no /hc
subdiretório, o .htaccess
arquivo no subdiretório é então processado e substitui as diretivas mod_rewrite no .htaccess
arquivo pai, para que você não termine com um loop de reescrita.
RewriteRule .* index.php?/$0 [PT,L,QSA]
ATUALIZAR:Seusubstituiçãostring no último RewriteRule
difere da diretiva anterior. Provavelmente ambos não estão corretos. Você pode querer remover o ?
na diretiva acima, a menos que pretenda usar a string de consulta, então você deve adicionar um ?
à diretiva anterior. Tal como está, o primeiro usainformações do caminhopara passar a URL, o segundo usa ostring de consulta.
Aliás, o PT
sinalizador é redundante em arquivos por diretório .htaccess
. E se você não estiver usando a string de consulta, o QSA
sinalizador também poderá ser removido.
Responder2
Você precisa permitir a opção "reescrever" no arquivo de configuração do Apache "sites disponíveis". Para laravel você deve ter cuidado porque seu DocumentRoot (pasta pública onde você precisa do arquivo .htaccess) está dentro da pasta do projeto.