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.php
incluso 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 RewriteRule
directiva se usa en unservidoroanfitrión virtualcontexto (es decir, no en contenedores <Directory>
o .htaccess
- undirectoriocontexto), entonces la ruta URL que coincide con la RewriteRule
directiva 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 DocumentRoot
y <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 .htaccess
archivo colocado en la raíz del documento (que es donde supongo que lo está colocando) tampoco será procesado nunca.