Eu estava tentando fazer um plugin do WordPress funcionar, quando descobri, após horas de depuração, tentativa, erros e rezando aos antigos deuses gregos, que o plugin não funcionava porque era impossível para o servidor acessar um determinado arquivo.
O site é hospedado em um ambiente básico de hospedagem compartilhada, portanto, a única coisa que pode ser configurada é um .htaccess
arquivo. Este arquivo está cheio de regras, mas acabei descobrindo qual delas estava causando o problema com o plug-in:
RewriteRule ^wp-content/(?!themes/.*/core/css/custom\.css\.php$)(.*)\.php$ [R=404,L]
Quando comentei esta regra, o plugin começou a funcionar normalmente.
Agora, eu não sou um servidor ou .htaccess
especialista, mas a pessoa que codificou essa regra tinha algum tratamento de segurança em mente, então gostaria de alterá-la para que simplesmente permitisse que meu arquivo funcionasse.
O caminho do meu arquivo é:
wp-content/plugins/plugin-name/public/js/service-worker-loader.js.php
Pode me ajudar?
Aparte: Conforme escrito, esta regra/diretiva não está correta. Está "faltando" um segundo argumento. (O terceiro argumento/flags será tratado como o segundo argumento e resultará em solicitações que correspondem a esse padrão sendo reescritas erroneamente para o "URL" literal
[R=404,L]
- que obviamente não é um URL válido e provavelmente resultará em um erro 404 de maneira muito indireta ... por WordPress, não Apache.)Eu esperaria que a regra acima tivesse um único hífen (ie.
-
) como o segundo argumento. Por exemplo:A
L
bandeira não é necessária aqui.(Isso pode parecer sutil para o leitor casual, mas é um erro/erro de digitação flagrante.)
NO ENTANTO, você não precisa modificar essa regra para resolver seu problema. (Sem saber mais sobre isso, eu evitaria editar esta regra caso fosse um plugin WP, em vez de uma "pessoa", que a escreveu. Embora o fato de estar atualmente "errado" conforme escrito ainda permaneça.) Em vez disso, você pode simplesmente adicionar uma regra adicional bem no início do
.htaccess
arquivo para abrir uma exceção para o arquivo em questão. Por exemplo:Isso pressupõe o Apache 2.4. (Se você estiver no Apache 2.2, use o
L
sinalizador em vez deEND
.)Esta regra impede que quaisquer outras diretivas mod_rewrite no restante do
.htaccess
arquivo sejam processadas quando esse arquivo é solicitado.ATUALIZAR:
Sim, você pode fazer isso. Crie outro
.htaccess
no subdiretório e simplesmente desative o mecanismo de reescrita. Por exemplo:Como as diretivas mod_rewrite não são herdadas por padrão, isso efetivamente substitui as diretivas mod_rewrite na configuração pai (diretório). As diretivas mod_rewrite no pai não são processadas, portanto, a solicitação não é bloqueada.
(Cada módulo Apache é processado de forma diferente. Diretivas de outros módulos, como mod_expires, ainda seriam processadas na configuração pai/raiz.)