Tenho a seguinte estrutura de diretório:
/html
.git
project-folder
build
index.html
.htaccess
O servidor apache vê o diretório /html
como uma pasta raiz para o domínio https://example.com
.
O que devo colocar .htaccess
para poder ver index.html
como um índice raiz para o domínio https://example.com
?
O DirectoryIndex poderia ajudar? Se sim, como escrever o RewriteRule
and RewriteCond
then?
Na verdade não, isso ajudaria apenas com solicitações para o diretório raiz em si e não
/<something>
. Isso deve ser deixado como padrão, para servirindex.html
do diretório solicitado (incluindo/html/project-folder/build
). Por exemplo:Estou assumindo que você não precisa acessar nada fora do
/build
subdiretório publicamente. Também estou assumindo que você está no Apache 2.4 (em oposição ao Apache 2.2).Aqui estão dois métodos, dependendo se você terá um ou dois
.htaccess
arquivos. O segundo está no/build
subdiretório.Um
.htaccess
arquivo na raiz do documentoNo
.htaccess
arquivo raiz (at/html/.htaccess
), você pode reescrever internamente quaisquer solicitações internas que ainda não sejam para o/project-folder/build
subdiretório.Quaisquer solicitações externas
/project-folder/build
precisam ser redirecionadas externamente de volta para a raiz (ou bloqueadas completamente).Por exemplo:
O uso da
REDIRECT_STATUS
variável de ambiente naRewriteCond
diretiva garante que estamos apenas verificando requisições diretas (externas) e não reescritas internas (por outras regras). Embora, neste exemplo limitado, o uso doEND
sinalizador na segunda regra torne essa verificação redundante.Dois
.htaccess
arquivos (um na raiz do documento e um no subdiretório do projeto)Isso é necessário se o projeto (diretório) tiver seu próprio
.htaccess
arquivo que também contenha diretivas mod_rewrite.Nesse cenário, o redirecionamento externo de volta para a raiz precisaria estar no
.htaccess
arquivo da pasta do projeto (não no.htaccess
arquivo raiz), porque as diretivas mod_rewrite não são herdadas (por padrão).Por exemplo:
Neste caso, não importa se
L
ouEND
é usado na regra acima.À primeira vista, o redirecionamento acima pode parecer que está redirecionando de volta para si mesmo, mas observe que o caminho da URL capturado (do
RewriteRule
padrão ) é relativo ao diretório que contém o.htaccess
arquivo. Então, uma solicitação para/project-folder/build/<something>
é redirecionada de volta para/<something>
na "raiz".Sempre teste primeiro com redirecionamentos 302 (temporários) para evitar possíveis problemas de cache.