A reescrita não funciona no arquivo .htaccess

Jun 21 2018

Atualização de 26/06/18: entendo que esta pode ser uma duplicata de Redirecionar, Alterar URLs ou Redirecionar HTTP para HTTPS no Apache - Tudo que você sempre quis saber sobre as regras de Mod_Rewrite, mas tinha medo de perguntar , no entanto, mencionei no meu original post que eu estive nesse post e encontrei o site do testador desse post. Eu li aquele post e, embora ainda seja um novato em reescrever regras, não acho que seja duplicado; no entanto, posso estar errado.

Estou tentando configurar uma nova regra de reescrita em meu .htaccessarquivo (abaixo)

    SetEnv HTTPS on

<IfModule mod_rewrite.c>
    RewriteEngine On
Options -Indexes
    # Send would-be 404 requests to Craft
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
    RewriteRule (.+) index.php?p=$1 [QSA]
Options - Autodiscover
   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} -s [OR]
   RewriteCond %{REQUEST_FILENAME} -l [OR]
   RewriteCond %{REQUEST_FILENAME} -d
   RewriteRule ^.*$ - [NC,L]
   RewriteRule ^.*$ autodiscover.php [NC,L]
</IfModule>

Encontrei este testador online neste artigo: Redirecionar, alterar URLs ou redirecionar HTTP para HTTPS no Apache - tudo o que você sempre quis saber sobre regras Mod_Rewrite, mas tinha medo de perguntar

Link para o testador: .htaccess tester

Quando executei minha configuração, obtive as seguintes informações de depuração de saída para .htaccess

Minha pergunta:

  1. Como posso ter certeza de que o index.php não está sendo roteado incorretamente com base na saída das ' informações de depuração para .htaccess '?
    Na saída de 'informações de depuração para .htaccess', o index.php está sendo anexado ao autodiscover.xml - o que NÃO é o que eu preciso que aconteça.
  2. O que há de errado com a minha configuração que faz com que ela falhe em relação à parte da Descoberta Automática? As ' informações de depuração para .htaccess ' afirmam que a condição foi atendida apenas por causa do 'OU' em minha configuração.

Obrigado a todos que virem isso e oferecerem qualquer tipo de ajuda ou explicação !! :-)

Respostas

1 EsaJokinen Jun 22 2018 at 14:04

A última regra não tem nenhuma condição, por isso é sempre usada.

RewriteRule ^.*$ autodiscover.php [NC,L]

A RewriteConddiretiva define uma condição de regra. Um ou mais RewriteCondpodem preceder uma RewriteRulediretiva. A regra a seguir só é usada se o estado atual do URI corresponder ao seu padrão e se essas condições forem atendidas.

Portanto, todas as suas condições estão relacionadas à regra anterior, em vez disso:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

Além disso:

  • Você só precisa de RewriteEngine Onuma vez.

  • Options- Autodiscover teria um erro de sintaxe SE houvesse esse recurso de servidor.