Ich habe eine Neuinstallation von Apache 2.2 auf meinem Vista-Rechner, alles funktioniert einwandfrei, bis auf das Umschreiben des Mods.
Ich habe nicht kommentiert
LoadModule rewrite_module modules/mod_rewrite.s
aber keine meiner Umschreiberegeln funktioniert, auch nicht einfache
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
Alle Regeln, die ich verwende, funktionieren auf meinem Hosting, also sollten sie in Ordnung sein. Meine Frage ist also, gibt es irgendwelche versteckten Dinge in der Apache-Konfiguration, die das Umschreiben von Mods blockieren könnten?
Um mod_rewrite
zu verwenden, können Sie den folgenden Befehl in das Terminal eingeben:
Sudo a2enmod rewrite
Starten Sie Apache2 danach neu
Sudo /etc/init.d/Apache2 restart
oder
Sudo service Apache2 restart
oder gemäß der neuen einheitlichen Systemsteuerung
Sudo systemctl restart Apache2
Wenn Sie möchten, können Sie die folgende .htaccess
-Datei verwenden.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Die obige .htaccess
-Datei (falls in Ihrer DocumentRoot
abgelegt) leitet den gesamten Datenverkehr in eine index.php
-Datei in der DocumentRoot
um, sofern die Datei nicht vorhanden ist.
Angenommen, Sie haben die folgende Verzeichnisstruktur und httpdocs ist DocumentRoot
.
httpdocs/
.htaccess
index.php
images/
hello.png
js/
jquery.js
css/
style.css
includes/
app/
app.php
Alle in httpdocs vorhandenen Dateien werden mit dem oben gezeigten .htaccess
an den Anforderer weitergeleitet, alle anderen werden jedoch an httpdocs/index.php
weitergeleitet. Auf Ihre Anwendungsdateien in includes/app
kann nicht zugegriffen werden.
Für meine Situation hatte ich
RewriteEngine On
in meinem .htaccess
, zusammen mit dem geladenen Modul, und es hat nicht funktioniert.
Die Lösung für mein Problem bestand darin, meinen vhost-Eintrag so zu bearbeiten, dass er inlcude ist
AllowOverride all
im Abschnitt <Directory>
für die betreffende Site.
Versuchen Sie die Einstellung: AllowOverride All
.
Das zweithäufigste Problem ist, dass das Umschreiben von Mods nicht aktiviert ist: a2enmod rewrite
und starten Sie Apache neu.
Wenn dies nicht funktioniert, versuchen Sie,/etc/Apache2/sites-enabled/000-default zu bearbeiten
fast oben finden Sie
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Ändern Sie den AllowOverride None
in AllowOverride All
das hat bei mir funktioniert
In Ubuntu:
Lauf:
a2enmod rewrite
und dann:
service Apache2 restart
mod_rewrite
wird jetzt aktiviert!
Es gibt viele Möglichkeiten, wie Sie dieses Problem beheben können, wenn Sie die Ursache des Problems kennen.
Problem 1
Erstens kann es ein Problem sein, wenn auf Ihrem Apache das Modul mod_rewrite.c nicht installiert oder aktiviert ist.
Aus diesem Grund müssten Sie es wie folgt aktivieren
Öffne deine Konsole und tippe folgendes ein:
Sudo a2enmod rewrite
Starten Sie Ihren Apache-Server neu.
service Apache2 restart
Problem 2
Darüber hinaus müssen Sie möglicherweise die Überschreibungsregel aus der Apache-Konfigurationsdatei (entweder Apache2.conf, http.conf oder 000-Standarddatei) ändern, falls dies nicht funktioniert.
Suchen Sie "Verzeichnis/var/www /"
Ändern Sie die Option "Keine überschreiben" in "Alle überschreiben".
Aufgabe 3
Wenn Sie die Fehlermeldung erhalten, dass das Modul zum erneuten Schreiben nicht gefunden wurde, ist Ihr Benutzerverzeichnis-Modul möglicherweise nicht aktiviert. Aus diesem Grund müssen Sie es aktivieren.
Geben Sie dies in die Konsole ein:
Sudo a2enmod userdir
Versuchen Sie dann, das Umschreibemodul zu aktivieren, falls es noch nicht aktiviert ist (wie oben erwähnt).
Um weiter zu lesen, können Sie diese Seite besuchen: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
Öffnen Sie das Terminal und geben Sie a2enmod rewrite
ein. Dadurch wird Ihr mod_rewrite
-Modul für Apache aktiviert.
Gehen Sie dann zu /etc/Apache2/sites-available
und bearbeiten Sie die Standarddatei. (Hierzu müssen Sie über Schreibrechte für diese Datei und den für Websites verfügbaren Ordner verfügen.)
Ersetzen Sie unten durch die vorhandenen Zeilen 4 bis 14
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Nun starte deinen Apache neu mit /etc/init.d/Apache2 restart
oder service Apache2 restart
Machen Sie noch einmal einen sauberen URL-Test und dieses Mal wird er bestanden.
Die neue Apache-Version hat sich in gewisser Weise geändert. Wenn Ihre Apache-Version 2.4 ist, müssen Sie zu /etc/Apache2/
gehen. Es wird eine Datei mit dem Namen Apache2.conf
geben. Sie müssen diesen bearbeiten (Sie sollten Root-Berechtigung haben). Ändern Sie den Verzeichnistext wie folgt
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Starten Sie nun Apache neu.
service Apache2 reload
Hoffe, es funktioniert.
<edit>
Ich habe gerade bemerkt, dass Sie "mod_rewrite.s" anstelle von "mod_rewrite.so" gesagt haben - ich hoffe, das ist ein Tippfehler in Ihrer Frage und nicht in der Datei "httpd.conf"! :)
</ edit>
Ich bin mehr daran gewöhnt, Apache unter Linux zu verwenden, aber ich musste dies neulich tun.
Schauen Sie sich zunächst Ihr Apache-Installationsverzeichnis an. (Ich gehe davon aus, dass Sie es hier unter "C:\Programme" installiert haben.)
Schauen Sie sich den Ordner "C:\Programme\Apache Software Foundation\Apache2.2\modules" an und vergewissern Sie sich, dass sich dort eine Datei mit dem Namen mod_rewrite.so befindet. (Sollte es sein, wird es als Teil der Standardinstallation bereitgestellt.
Öffnen Sie als nächstes "C:\Programme\Apache Software Foundation\Apache2.2\conf" und öffnen Sie httpd.conf. Stellen Sie sicher, dass die Zeile:
#LoadModule rewrite_module modules/mod_rewrite.so
ist unkommentiert:
LoadModule rewrite_module modules/mod_rewrite.so
Wenn Sie die RewriteEngine standardmäßig aktivieren möchten, möchten Sie möglicherweise Folgendes hinzufügen
<IfModule mod_rewrite>
RewriteEngine On
</IfModule>
bis zum Ende Ihrer httpd.conf-Datei.
Wenn nicht, stellen Sie sicher, dass Sie angeben
RewriteEngine On
irgendwo in Ihrer .htaccess-Datei.
Ich habe das einfach gemacht
Sudo a2enmod rewrite
anschließend müssen Sie den Apache-Dienst mit dem folgenden Befehl neu starten
Sudo service Apache2 restart
Alter Thread, möchte nur setzen, dass nicht AllowOverride auf all gesetzt wird, sondern stattdessen einen bestimmten Mod benutzt, den du benutzen willst,
AllowOverride mod_rewrite mod_mime
Und diese Zeile sollte nicht kommentiert werden
LoadModule rewrite_module modules/mod_rewrite.so
Referenzen
Verwenden Sie den folgenden Befehl
Sudo a2enmod rewrite
Und der Neustart Apache durch den folgenden Befehl
Sudo service Apache2 restart
Es gibt offensichtlich mehr als eine Möglichkeit, dies zu tun, aber ich würde vorschlagen, den Standard more zu verwenden:
ErrorDocument 404 /index.php?page=404
Als ich zum ersten Mal mit Mod_rewrite-Regeln kämpfte, die meinen Verkehr ignorierten, erfuhr ich (frustrierend), dass ich sie im falschen <VirtualHost>
platziert hatte, was bedeutete, dass mein Verkehr alle ignorierte von ihnen, egal wie gut sie geschrieben waren. Stellen Sie sicher, dass Ihnen dies nicht passiert:
# Change the log location to suit your system. RewriteLog /var/log/Apache-rw.log RewriteLogLevel 2
Diese Parameter werden aktiviert, wenn Sie Apache ordnungsgemäß neu starten, damit Sie sie in mod_rewrite wiederverwenden und das Verhalten genau überwachen können. Wenn Ihr Problem behoben ist, drehen Sie den RewriteLogLevel zurück und feiern Sie.
In 100% meiner Erfahrung habe ich festgestellt, dass das RewriteLog mir geholfen hat, das Problem mit meinen Umschreiberegeln zu entdecken. Ich kann das nicht genug empfehlen. Viel Glück bei der Fehlersuche!
Dieses Lesezeichen ist auch Ihr bester Freund: http://httpd.Apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
Was bei mir funktioniert hat (in Ubuntu):
Sudo su
cd /etc/Apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load
Stellen Sie außerdem, wie bereits erwähnt, sicher, dass AllowOverride all
im entsprechenden Abschnitt von /etc/Apache2/sites-available/default
eingestellt ist.