Se você remover a barra em um diretório e ainda esperar que o documento de índice de diretório (nesse diretório) seja retornado, será necessário "corrigir" manualmente o URL, reescrevendo-o internamente no documento de índice. (Você basicamente precisa refazer o que você desfez, transformando o DirectorySlash Off
.)
Tente algo como o seguinte antes de outras diretivas do mod_rewrite no arquivo raiz .htaccess
:
DirectorySlash Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_FILENAME}/index.php -f
RewriteRule (.*) $1/index.php [L]
Para todas as solicitações de diretórios físicos, elas não terminam em uma barra onde index.php
existe nesse diretório e, em seguida, reescrevem internamente para index.php
.
Alternativamente, você poderia apenas acrescentar a barra final (através de uma reescrita interna) e permitir que o mod_dir emita uma sub-requisição para o DirectoryIndex
. Por exemplo:
RewriteRule (.*) $1/ [L]
Supondo que você tenha um DirectoryIndex
set (o que você provavelmente tem se isso estivesse funcionando anteriormente), então mod_dir internamente reescreverá a requisição (estritamente uma sub-requisição) de /advice/
to /advice/index.php
. No entanto, este é agora um processo de dois estágios, então você pode fazer isso tudo junto com o mod_rewrite (a menos que você tenha vários documentos de índice de diretório).
O acima é um caso geral para todos os diretórios. Você poderia ser mais específico e verificar apenas o diretório / URL em questão:
RewriteRule ^advice$ advice/index.php [L]
Se a solicitação for /advice
, reescreva internamente para /advice/index.php
- isso não verifica se é um diretório, apenas assumido.