Ich habe eine Neuinstallation von Apache 2.2 auf meinem Vista-Computer, alles funktioniert einwandfrei, außer Mod Rewrite.
Ich habe nicht kommentiert
LoadModule rewrite_module modules/mod_rewrite.s
Aber keine meiner Regeln zum Umschreiben funktioniert, auch keine einfachen
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
Alle Regeln, die ich verwende, funktionieren auf meinem Hosting, daher sollten sie in Ordnung sein. Meine Frage ist also, ob es in der Apache-Konfiguration etwas Verborgenes gibt, das das Umschreiben von Mods blockieren könnte.
apache
mod-rewrite
Jakub Arnold
quelle
quelle
AllowOverride FileInfo
anstatt alles zuzulassen, wie ALLE Antworten auf dieser Seite vermuten lassen. Es ist traurig zu sehen, dass all diese Antworten so lange funktionieren, wie es funktioniert, es ist in Ordnung, anstatt zu versuchen, die Konsequenzen der vorgeschlagenen „Lösung“ zu verstehen. Versuchen Sie zu verstehen, was Sie auf Ihrem Server tun und wie Sie die gerade gewährten Berechtigungen einschränken könnenAllowOverride All
. RTFM! ist es zu diesem Thema ganz klar.Antworten:
Zur Verwendung können
mod_rewrite
Sie den folgenden Befehl in das Terminal eingeben:Starten Sie apache2 danach neu
oder
oder gemäß neuer einheitlicher Systemsteuerungsmethode
Wenn Sie möchten, können Sie die folgende
.htaccess
Datei verwenden.Die obige
.htaccess
Datei (falls in Ihrer Datei abgelegtDocumentRoot
) leitet den gesamten Datenverkehr in eineindex.php
Datei um,DocumentRoot
sofern die Datei nicht vorhanden ist.Nehmen wir also an, Sie haben die folgende Verzeichnisstruktur und httpdocs ist die
DocumentRoot
Jede Datei, die in httpdocs vorhanden ist, wird dem Anforderer
.htaccess
wie oben gezeigt zugestellt. Alles andere wird jedoch umgeleitethttpdocs/index.php
. Auf Ihre Anwendungsdateien inincludes/app
kann nicht zugegriffen werden.quelle
AllowOverride All
, damit die.htaccess
Datei überhaupt gelesen werden kann.a2enmod rewrite
in Windows verwenden?Für meine Situation hatte ich
in meinem
.htaccess
, zusammen mit dem Modul geladen, und es funktionierte nicht.Die Lösung für mein Problem bestand darin, meinen vhost-Eintrag auf inlcude zu bearbeiten
im
<Directory>
Abschnitt für die betreffende Site.quelle
a2enmod rewrite
&RewriteEngine On
in the.htaccess
- das VorhandenseinAllowOverride all
in der VirtualHost-Datei verhindert, dass es funktioniert - hat mich diesAllowOverride all
AllowOverride
Direktive bestimmt die "Arten von Direktiven, die in.htaccess
Dateien erlaubt sind ". "Wenn diese Anweisung auf gesetzt istNone
, werden.htaccess
Dateien vollständig ignoriert. In diesem Fall versucht der Server nicht einmal,.htaccess
Dateien im Dateisystem zu lesen ." Offizielle Dokumente: httpd.apache.org/docs/2.2/mod/core.html#allowoverridea2enmod rewrite
und dann in der VirtualHosts-Datei "AllowOverride None" in "AllowOverride All" ändern, sollte dies funktionieren. Die VirtualHosts-Datei gilt, wenn Sie mehrere Domänennamen auf demselben Server (und derselben IP-Adresse) ausführen. Sie hätten es eingerichtet, um die Domain einzurichten.Versuchen Sie die Einstellung :
AllowOverride All
.Das zweithäufigste Problem ist, dass das Umschreiben von Mods nicht aktiviert ist:
a2enmod rewrite
und dann Apache neu starten.quelle
Wenn dies nicht der Fall ist, bearbeiten Sie / etc / apache2 / sites-enabled / 000-default
fast oben finden Sie
Ändern Sie das
AllowOverride None
inAllowOverride All
das hat bei mir funktioniert
quelle
/laravel/public/authors was not found on this server
zu/index.php was not found on this server
<Directory /var/www/html>
, um die Regel nur ab diesem Ordner anzuwenden.In Ubuntu:
Lauf:
und dann:
mod_rewrite
wird jetzt aktiviert!quelle
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 Ihr Apache das Modul mod_rewrite.c nicht installiert oder aktiviert hat.
Aus diesem Grund müssten Sie es wie folgt aktivieren
Öffnen Sie Ihre Konsole und geben Sie Folgendes ein:
sudo a2enmod rewrite
Starten Sie Ihren Apache-Server neu.
service apache2 restart
Problem 2
Wenn dies nicht funktioniert, müssen Sie möglicherweise auch die Überschreibungsregel aus der Apache Conf-Datei (entweder Apache2.conf, http.conf oder 000-Standarddatei) ändern, wenn dies nicht funktioniert.
Suchen Sie "Verzeichnis / var / www /"
Ändern Sie "Keine überschreiben" in "Alle überschreiben".
Problem 3
Wenn Sie eine Fehlermeldung erhalten, dass das Umschreibemodul nicht gefunden wurde, ist Ihr Benutzerverzeichnismodul wahrscheinlich 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, wenn es immer noch nicht aktiviert ist (wie oben erwähnt).
Weitere Informationen finden Sie auf dieser Website: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
quelle
AllowOverride All
da dies zu viele gefährliche Funktionen aktiviert (z. B. die Verwendung von Perl-Skripten). VerwendenAllowOveride Options
Die neue Apache-Version hat sich in gewisser Weise geändert. Wenn Ihre Apache-Version 2.4 ist, müssen Sie zu gehen
/etc/apache2/
. Es wird eine Datei mit dem Namen gebenapache2.conf
. Sie müssen diese bearbeiten (Sie sollten über die Root-Berechtigung verfügen). Ändern Sie den Verzeichnistext wie folgtStarten Sie nun Apache neu.
Hoffe, es funktioniert.
quelle
Öffnen Sie das Terminal und geben
a2enmod rewrite
Sie es ein. Dadurch wird Ihrmod_rewrite
Modul für Apache aktiviert .Gehen Sie dann zu
/etc/apache2/sites-available
und bearbeiten Sie die Standarddatei. (Dazu müssen Sie über beschreibbare Berechtigungen für diese Datei und den für Websites verfügbaren Ordner verfügen.)Ersetzen Sie unten durch vorhandene Zeilen 4 bis 14
Starten Sie nun Ihren Apache mit
/etc/init.d/apache2 restart
oder neuservice apache2 restart
Machen Sie erneut einen sauberen URL-Test und diesmal wird er bestanden.
quelle
<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 eher 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.)
Sehen Sie sich den Ordner "C: \ Programme \ Apache Software Foundation \ Apache2.2 \ modules" an und stellen Sie sicher, dass sich dort eine Datei mit dem Namen mod_rewrite.so befindet. (Es sollte sein, es wird 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:
ist unkommentiert:
Wenn Sie die RewriteEngine standardmäßig aktivieren möchten, möchten Sie möglicherweise Folgendes hinzufügen
bis zum Ende Ihrer httpd.conf-Datei.
Wenn nicht, stellen Sie sicher, dass Sie angeben
irgendwo in Ihrer .htaccess-Datei.
quelle
Ich habe das gerade gemacht
Dann müssen Sie den Apache-Dienst mit dem folgenden Befehl neu starten
quelle
Alter Thread, möchte nur setzen, dass AllowOverride nicht auf alle gesetzt wird, sondern einen bestimmten Mod verwendet, den Sie verwenden möchten.
Und diese Zeile sollte nicht kommentiert werden
Refrences
quelle
Verwenden Sie den folgenden Befehl
Und der Neustart von Apache über den folgenden Befehl
quelle
Es gibt offensichtlich mehr als einen Weg, dies zu tun, aber ich würde vorschlagen, den Standard zu verwenden:
quelle
Als ich zum ersten Mal mit mod_rewrite-Regeln zu kämpfen hatte, die meinen Datenverkehr ignorierten, erfuhr ich (frustrierend), dass ich sie falsch platziert hatte
<VirtualHost>
, was bedeutete, dass mein Datenverkehr sie alle ignorierte, 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, sodass Sie sie wiederverwenden und das Verhalten von mod_rewrite genau überwachen können. Sobald Ihr Problem behoben ist, drehen Sie den RewriteLogLevel wieder herunter und feiern Sie.
In 100% meiner Erfahrung habe ich festgestellt, dass mir das RewriteLog dabei geholfen hat, das Problem mit meinen Umschreiberegeln zu entdecken. Ich kann das nicht genug empfehlen. Viel Glück bei der Fehlerbehebung!
Dieses Lesezeichen ist auch Ihr bester Freund: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
quelle
Was hat bei mir funktioniert (in Ubuntu):
Stellen Sie außerdem, wie bereits erwähnt, sicher, dass dies
AllowOverride all
im entsprechenden Abschnitt von festgelegt ist/etc/apache2/sites-available/default
quelle