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.php
selbst 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 RewriteRule
Direktive in einemServerodervirtueller HostKontext (d. h. nicht in <Directory>
oder .htaccess
Container - einVerzeichnisKontext), dann RewriteRule
ist 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 DocumentRoot
und <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), .htaccess
wird auch keine Datei im Dokumentstammverzeichnis (und ich gehe davon aus, dass Sie sie dort ablegen) verarbeitet.