Você poderia simplesmente fazer uma exceção no início do seu arquivo .htaccess
... se a solicitação corresponder a uma dessas subpastas ( e é um arquivo PHP existente?) e então parar o processo de reescrita . Por exemplo:
RewriteRule ^(subfolder1|subfolder2)$ - [L]
Se você simplesmente quiser ignorar todas as solicitações, pode parar por aí. Se você especificamente precisa apenas pular as reescritas se elas corresponderem aos arquivos PHP existentes então:
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(subfolder1|subfolder2)/.+\.php$ - [L]
Se a solicitação for para /subfolder1/<something>.php
e esse arquivo existir, pare aqui.
UPDATE # 1:
We only want this to apply to PHP files in /public_html, and none of its subfolders
Você provavelmente ainda pode fazer isso com uma exceção antes das regras existentes. Se o pedido contiver uma barra (ou seja, é para uma subpasta), aborte. Por exemplo:
RewriteRule /.*/?$ - [L]
Como alternativa, altere o padrão em seu RewriteRule
s existente para corresponder a qualquer coisa, exceto uma barra (ou seja, [^/]*
) em vez de literalmente tudo (ou seja, .*
). Aplicado às suas regras existentes:
RewriteRule ^([^/]*)\.php$ /$1/ [L,R=301]
:
RewriteRule ^([^/]*)/$ $1.php [L]
:
RewriteRule ^[^/]*$ $0/ [L,R=301]
UPDATE # 2: Adicionadas âncoras aos padrões RewriteRule
acima.
UPDATE # 3: Para fazer isso, aplique-se apenas a arquivos específicos na raiz do documento. Você usaria uma exceção (como no exemplo acima) que exclui todos os outros arquivos. Por exemplo:
RewriteRule !^(file1|file2|file3|file4) - [L]
Para permitir que todos os URLs iniciem /file1
, /file2
, /file3
, etc. (o URL correspondido pelo padrão RewriteRule
não inicia com uma barra por -diretório .htaccess arquivos.)
No contexto ...
Options -MultiViews
RewriteEngine On
# Only allow specific requests to be processed...
RewriteRule !^(file1|file2|file3|file4) - [L]
# Remove .php extension
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301]
# Force trailing slash
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]
# Route request...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.+)/$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*)/$ $1.php [L]