Apache2 mod_rewrite aparentemente não está fazendo nada

Apache2 mod_rewrite aparentemente não está fazendo nada

Estou tendo dificuldade para fazer o mod_rewrite funcionar no Apache2 no Debian 10. Habilitei a extensão com

a2enmod rewrite
systemctl restart apache2

E não tive erros e posso ver o módulo em

apachectl -M
...
rewrite_module (shared)
...

Embora quando eu o adiciono ao meu vhost nos sites disponíveis

<VirtualHost *:80>
   ServerName default.nothing
   ServerAlias www.default.nothing
   DocumentRoot /var/www/html/public_html/00-default
   <Directory "/volume/dev/html/public_html/00-default">
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      Allow from all
      RewriteEngine on
      RewriteRule ^192.168.20.87$ nothing
   </Directory>
   <IfModule mpm_user_module>
      ServerEnvironment apache apache
   </IfModule>
</VirtualHost>

Esperando que isso reescrevesse o URLhttp://192.168.20.87/page.phpcomo http://nothing/page.php na aba do navegador. Não importa o que eu coloquei no RewriteRule, nada parece acontecer. Tenho certeza que estou fazendo algo

Responder1

RewriteEngine on
RewriteRule ^192.168.20.87$ nothing

Por alguma razão, se eu fizer isso com .htaccess, funciona

Embora isso não corresponda ao URL, http://192.168.20.87/page.phpmesmo que você "faça isso com .htaccess", você deve estarfazendo outra coisa?

A regra acima (quando usada em um <Directory>contêiner) corresponde a uma URL no formato http://192.168.20.87/192.168.20.87(ou http://default.nothing/192.168.20.87- se seus nomes de host forem resolvidos).

ORewriteRule padrãocorresponde apenas ao caminho da URL, não ao nome do host (ou seja, 192.168.20.87). Portanto, isso corresponde a /page.php, (ou page.php- caminho relativo/prefixo sem barra - quando usado em umdiretóriocontexto como <Directory>ou .htaccess.)

Então, isso precisaria ser assim:

RewriteRule ^page\.php$ nothing

(Embora não esteja claro o que você está tentando fazer aqui, o que é "nada"? Se você está tentando acionar um 404, então esta não é realmente a maneira de fazer isso.)

Como @Gerrit mencionou vagamente nos comentários, quando a RewriteRulediretiva é usada em umservidorouhost virtualcontexto (ou seja, não em <Directory>ou .htaccesscontêineres - umdiretóriocontexto), então o caminho da URL correspondente à RewriteRulediretiva será relativo à raiz, começando com uma barra, porque a diretiva é processada muito antes, antes de ser mapeada para o sistema de arquivos. por exemplo. ^/page\.php$.


ATUALIZAR:

DocumentRoot /var/www/html/public_html/00-default
<Directory "/volume/dev/html/public_html/00-default">

Acabei de notar que suas diretivas DocumentRoote <Directory>estão fazendo referência a dois locais diferentes do sistema de arquivos?! Com as informações limitadas da pergunta, este <Directory>contêiner nunca será processado.

Mas, a menos que você tenha diretivas adicionais em outro lugar (o que presumo que você deva ter), qualquer .htaccessarquivo colocado na raiz do documento (que é onde presumo que você o está colocando) também nunca será processado.

informação relacionada