htaccess - Permite a visualização de index.html por meio de www.example.com/foo em vez de www.example.com/foo/index.html

2

Portanto, tenho uma pasta hipotética no meu site protegida por Deny from all no meu arquivo .htaccess . Eu codifiquei uma exceção como abaixo:

<files index.html>
order allow,deny
Allow from all
</files>

Se um usuário digitar www.example.com/path/index.html , conseguirá ver a página da Web bem. No entanto, se eles usarem a abordagem mais "fácil de usar" e digitar www.example.com/path , receberão um erro 403 Forbidden . Como os dois caminhos estão acessando o mesmo arquivo, não consigo ver como um funcionaria e o outro não. Não há outros arquivos de índice no diretório que possam estar interferindo no index.html . Existe uma maneira de configurar .htaccess de uma maneira que permita esse segundo caminho? Qualquer solução é aceitável, incluindo aquelas fora do domínio de .htaccess ; sim eu tenho PHP, não, eu não tenho AJAX.

    
por hjk321 28.05.2018 / 06:56

2 respostas

0

Quando você especifica apenas o diretório nulo, mod_dir emite uma subrequição interna para o DirectoryIndex (que eu suponho que esteja configurado para atender index.html no seu caso). "O problema" é que a diretiva <Files> é processada primeiro antes que a subrequência ocorra. Mas antes que essa subrequação ocorra, o nome do arquivo com o qual a diretiva <Files> corresponde ainda não foi resolvido; ele está vazio! Então, precisamos corresponder a um nome de arquivo vazio .

No entanto, depois que a subrequisa de index.html (o DirectoryIndex) ocorreu, o contêiner <Files> é reprocessado (em um contexto .htaccess ), mas desta vez o nome do arquivo foi resolvido para index.html . Então, precisamos combinar também com index.html !

Isso pode ser contabilizado por ter dois contêineres <Files> . Por exemplo:

<Files "">
Order allow,deny
Allow from all
</Files>

<Files "index.html">
Order allow,deny
Allow from all
</Files>

Ou (de preferência) combinando-os em um único contêiner <FilesMatch> (que aceita um regex como argumento). Por exemplo:

<FilesMatch ^(index\.html)?$>
Order allow,deny
Allow from all
</Files>

Ao tornar o nome de arquivo opcional (% ? ), isso corresponde efetivamente a ambas as passagens: um nome de arquivo vazio e index.html .

Se os URLs / e /index.html estiverem disponíveis e veicularem o mesmo conteúdo, você deverá canonicalizar o URL de alguma forma para evitar possíveis problemas de conteúdo duplicado. (De preferência, um redirecionamento de /index.html para / .)

...and type www.example.com/path

Só para esclarecer, se o usuário digitar www.example.com/path , onde path é um diretório do sistema de arquivos e uma barra final é omitida da URL, então mod_dir (por padrão) emitirá uma saída externa 301 redireciona para www.example.com/path/ (com uma barra à direita) para "corrigir" o URL. Então, a URL com a qual estamos lidando é realmente www.example.com/path/ .

    
por 29.05.2018 / 00:48
0

link

"A diretiva DirectoryIndex define a lista de recursos a serem procurados, quando o cliente solicita um índice do diretório, especificando um / no final do nome do diretório ..."

# Example A: Set index.html as an index page, then add index.php to that list as well.
<Directory "/foo">
    DirectoryIndex index.html
    DirectoryIndex index.php
</Directory>

# Example B: This is identical to example A, except it's done with a single directive.
<Directory "/foo">
    DirectoryIndex index.html index.php
</Directory>

# Example C: To replace the list, you must explicitly reset it first:
# In this example, only index.php will remain as an index resource.
<Directory "/foo">
    DirectoryIndex index.html
    DirectoryIndex disabled
    DirectoryIndex index.php
</Directory>'
    
por 28.05.2018 / 07:43