Apache2 mod_rewrite tut scheinbar nichts

Apache2 mod_rewrite tut scheinbar nichts

Ich habe Probleme, mod_rewrite in Apache2 unter Debian 10 zum Laufen zu bringen. Ich habe die Erweiterung aktiviert mit

a2enmod rewrite
systemctl restart apache2

Und hatte keine Fehler und kann das Modul in sehen

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

Obwohl, wenn ich es zu meinem vhost in den sites-available hinzufüge

<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>

In der Hoffnung, dass es die URL umschreiben würdehttp://192.168.20.87/page.phpals http://nothing/page.php im Browser-Tab. Egal, was ich in RewriteRule eingebe, es scheint nichts zu passieren. Ich bin sicher, ich mache etwas

Antwort1

RewriteEngine on
RewriteRule ^192.168.20.87$ nothing

Aus irgendeinem Grund funktioniert es, wenn ich es mit .htaccess mache

Dies wird jedoch nicht mit der URL übereinstimmen, http://192.168.20.87/page.phpselbst wenn Sie es mit "tun .htaccess", also müssen Sieetwas anderes tun?

Die obige Regel (bei Verwendung in einem <Directory>Container) stimmt mit einer URL der Form überein http://192.168.20.87/192.168.20.87(oder http://default.nothing/192.168.20.87– wenn Ihre Hostnamen aufgelöst werden).

DerRewriteRule Musterstimmt nur mit dem URL-Pfad überein, nicht mit dem Hostnamen (z. B. 192.168.20.87). Dies stimmt also mit /page.php, überein (oder page.php- relativer Pfad/kein Schrägstrich-Präfix - wenn es in einemVerzeichnisKontext wie <Directory>oder .htaccess.)

Es müsste also stattdessen etwa wie folgt aussehen:

RewriteRule ^page\.php$ nothing

(Obwohl unklar ist, was Sie hier versuchen: Was ist „nichts“? Wenn Sie versuchen, eine 404-Fehlermeldung auszulösen, ist dies nicht wirklich die richtige Vorgehensweise.)

Wie @Gerrit in Kommentaren vage erwähnte, wenn die RewriteRuleDirektive in einemServerodervirtueller HostKontext (d. h. nicht in <Directory>oder .htaccessContainer - einVerzeichnisKontext), dann RewriteRuleist der von der Direktive gefundene URL-Pfad relativ zum Stammverzeichnis und beginnt mit einem Schrägstrich, da die Direktive viel früher verarbeitet wird, bevor sie dem Dateisystem zugeordnet wurde. zB. ^/page\.php$.


AKTUALISIEREN:

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

Mir ist gerade aufgefallen, dass Ihre DocumentRootund <Directory>-Anweisungen auf zwei verschiedene Dateisystemspeicherorte verweisen?! Mit den begrenzten Informationen in der Frage <Directory>wird dieser Container niemals verarbeitet.

Wenn Sie jedoch nicht an anderer Stelle über zusätzliche Anweisungen verfügen (was bei Ihnen vermutlich der Fall sein muss), .htaccesswird auch keine Datei im Dokumentstammverzeichnis (und ich gehe davon aus, dass Sie sie dort ablegen) verarbeitet.

verwandte Informationen