Ich versuche, mod_rewrite
das Modul von zu verwenden Apache24 server
, aber ich kann es nicht laden. Ich weiß, dass zu diesem Thema viele Fragen gestellt wurden, und ich habe sie alle durchgelesen, aber nichts scheint zu funktionieren. Dies sind die Schritte, die ich bisher befolgt habe:
Die Datei CHANGED
httpd.conf
hat folgende Änderungen vorgenommen:
a. UnkommentiertLoadModule rewrite_module modules/mod_rewrite.so
b. GeändertAllowOverride None
inAllowOverride All
Apache-Server neu gestartet
Habe geladene Module mit dem Eingabeaufforderungsbefehl überprüft
httpd -M
. Dort kann ich sehen, dass das Modul mod_rewrite geladen wurde. Ich füge das Bild unten an.
Aber nachdem ich alle diese Schritte ausgeführt habe, kann ich mod_rewrite nicht als geladenes Modul in sehen phpinfo
.
Wie im obigen Bild zu sehen ist, ist kein mod_rewrite-Modul geladen. Außerdem habe ich als wilden Hack sogar versucht, URLs mithilfe einer .htaccess
Datei umzuschreiben, aber das funktioniert nicht. Apache scheint .htaccess
die Datei zu ignorieren, obwohl ich sie in meinem Stammverzeichnis abgelegt habe.
Note: I am running `PHP` as an apache module
Using `WAMP` stack
Using `localhost` as server
Ich brauche dieses Modul dringend zum Umschreiben von URLs. Könnt ihr mir eine andere Möglichkeit zum Laden dieses Moduls vorschlagen?
BEARBEITEN
Ich habe versucht, die URL vom virtuellen Host neu zu schreiben, da die Antwort darauf schließen lässt, dass das Modul geladen ist und weder von .htaccess
noch von abhängt info.php
. Aber es erfolgt immer noch keine Umleitung. Ich füge das Virtual host
folgende Setup hinzu:
<VirtualHost *:80>
<Directory "/Apache24/htdocs">
Options FollowSymLinks
AllowOverride All
DirectoryIndex index.html index.php
</Directory>
ServerName localhost
DocumentRoot "/Apache24/htdocs"
ErrorLog "/Apache24/logs/error.log"
CustomLog "/Apache24/logs/access.log" combined
<directory "/Apache24/htdocs">
<IfModule rewrite_module>
Options +FollowSymlinks
RewriteEngine On
</IfModule>
<IfModule rewrite_module>
RewriteRule ^working.php fun.html
</IfModule>
</directory>
# Rewrite Rules #####################
RewriteEngine On
RewriteRule ^working.php fun.html
# end Rewrite Rules #################
</VirtualHost>
Der obige Code leitet es nicht weiter, working.php
wenn ich versuche, es auszuführen fun.html
. Er sagt einfach:
Die angeforderte URL /working.php wurde auf diesem Server nicht gefunden.
Antwort1
- Sie benötigen .htaccess oder AllowOverride nicht, damit mod_rewrite funktioniert. Verwenden Sie es nicht, da Sie der Administrator Ihres Servers sind, da es Ihnen das Leben nur komplizierter macht und unnötigen Overhead für Ihren Server verursacht.
Abgesehen vom Laden des Moduls ist die einzige Anweisung, die Sie benötigen:
RewriteEngine ein
Extra:
- Erwägen Sie stattdessen Redirect/RedirectMatch (von mod_alias) für einfache Umleitungen, wenn das alles ist, was Sie brauchen.
- Erwägen Sie die Definition Ihrer Weiterleitungen/Umschreibungen im Virtualhost-Kontext, um zukünftige Albträume und Haarausfall in naher Zukunft zu vermeiden.
Antwort2
Aus den verlinkten Screenshots geht hervor, dass Ihr Server-Stamm (Dateisystempfad) ist C:/Apache24
, Sie verweisen jedoch C:
in keiner Ihrer Server-Konfigurationsanweisungen darauf? Sie müssen den vollständigen Dateisystempfad referenzieren, zum Beispiel:
<Directory "C:/Apache24/htdocs">
RewriteRule ^working.php fun.html
Diese Anweisung, die direkt im VirtualHost (außerhalb eines <Directory>
Containers) verwendet wird, wird nie übereinstimmen. Wenn sie im Kontext eines VirtualHost (oder einer Serverkonfiguration) verwendet wird, stimmt mod_rewrite mit dem vollständigen URL-Pfad überein, was insbesonderebeinhaltetdas Schrägstrichpräfix. Dies ist ein wichtiger Unterschied zur Verwendung von mod_rewrite in einem Verzeichnis/ .htaccess
Kontext (wenn das Schrägstrichpräfix ausgeschlossen ist).