Apache2 mod_rewrite aparentemente no hace nada

Apache2 mod_rewrite aparentemente no hace nada

Tengo dificultades para que mod_rewrite funcione en Apache2 en Debian 10. Habilité la extensión con

a2enmod rewrite
systemctl restart apache2

Y no tuvo errores y puedo ver el módulo en

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

Aunque cuando lo agrego a mi vhost en los sitios disponibles

<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 reescriba la URL.http://192.168.20.87/page.phpcomo http://nothing/page.php en la pestaña del navegador. No importa lo que ponga en RewriteRule, parece que no sucede nada. Estoy seguro de que estoy haciendo algo

Respuesta1

RewriteEngine on
RewriteRule ^192.168.20.87$ nothing

Por alguna razón si lo hago con .htaccess funciona

Aunque esto no coincidirá con la URL http://192.168.20.87/page.phpincluso si "lo haces con .htaccess", debes estarhaciendo algo más?

La regla anterior (cuando se usa en un <Directory>contenedor) coincide con una URL del formulario http://192.168.20.87/192.168.20.87(o http://default.nothing/192.168.20.87- si sus nombres de host se resuelven).

ElRewriteRule patróncoincide solo con la ruta URL, no con el nombre de host (es decir, 192.168.20.87). Entonces, esto coincide con /page.php, (o page.php- ruta relativa/sin prefijo de barra diagonal - cuando se usa en undirectoriocontexto como <Directory>o .htaccess.)

Entonces esto tendría que ser como el siguiente:

RewriteRule ^page\.php$ nothing

(Aunque no está claro qué intenta hacer aquí, ¿qué es "nada"? Si está intentando activar un 404, entonces esta no es realmente la forma de hacerlo).

Como @Gerrit mencionó vagamente en los comentarios, cuando la RewriteRuledirectiva se usa en unservidoroanfitrión virtualcontexto (es decir, no en contenedores <Directory>o .htaccess- undirectoriocontexto), entonces la ruta URL que coincide con la RewriteRuledirectiva es relativa a la raíz y comienza con una barra diagonal, porque la directiva se procesa mucho antes, antes de que se haya asignado al sistema de archivos. p.ej. ^/page\.php$.


ACTUALIZAR:

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

¿Me acabo de dar cuenta de que sus directivas DocumentRooty <Directory>hacen referencia a dos ubicaciones diferentes del sistema de archivos? Con la información limitada de la pregunta, este <Directory>contenedor nunca será procesado.

Pero a menos que tenga directivas adicionales en otro lugar (que supongo que debe tener), cualquier .htaccessarchivo colocado en la raíz del documento (que es donde supongo que lo está colocando) tampoco será procesado nunca.

información relacionada