So aktivieren Sie mod_rewrite für Apache 2.2

474

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.

Jakub Arnold
quelle
1
Eigentlich war das Problem, dass ich einen falschen Pfad hatte, weil $ {DOCUMENT_ROOT} mich auf das Stammverzeichnis verwies, das beim Hosting in Ordnung war, aber auf lokaler Ebene falsch. Das Problem war also nicht nur RewriteEngine On, das ich bereits hatte.
Jakub Arnold
Können Sie bitte die akzeptierte Antwort auf diese ändern ? Der Autor der aktuell akzeptierten Antwort hat zugegeben, dass sie nicht gut genug ist.
Schatten-Zauberer ist Ohr für Sie
1
So aktivieren Sie mod_rewrite in Ubuntu 12.04 LTS (sollte auch in Debian funktionieren) . Dies zeigt Installation und Aktivierung, die Tutorials unten überraschenderweise nicht tun :(
Sliq
3
Ich würde jedem, der die Anweisung mod_rewrite in .htacces-Dateien aktivieren möchte, dringend empfehlen, sie zu verwenden, AllowOverride FileInfoanstatt 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önnen AllowOverride All. RTFM! ist es zu diesem Thema ganz klar.
RemyNL
1
@Black Es befindet sich in der Apache-Konfigurationsdatei mit dem Namen httpd.conf. Auf meinem PC befindet es sich im Verzeichnis C: \ xampp \ apache \ conf, da ich Apache mit XAMPP installiert habe.
Lex Soft

Antworten:

1005

Zur Verwendung können mod_rewriteSie 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äß neuer einheitlicher Systemsteuerungsmethode

sudo systemctl restart apache2

Wenn Sie möchten, können Sie die folgende .htaccessDatei verwenden.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

Die obige .htaccessDatei (falls in Ihrer Datei abgelegt DocumentRoot) leitet den gesamten Datenverkehr in eine index.phpDatei um, DocumentRootsofern die Datei nicht vorhanden ist.

Nehmen wir also an, Sie haben die folgende Verzeichnisstruktur und httpdocs ist die DocumentRoot

httpdocs/
    .htaccess
    index.php
    images/
        hello.png
    js/
        jquery.js
    css/
        style.css
includes/
    app/
        app.php

Jede Datei, die in httpdocs vorhanden ist, wird dem Anforderer .htaccesswie oben gezeigt zugestellt. Alles andere wird jedoch umgeleitet httpdocs/index.php. Auf Ihre Anwendungsdateien in includes/appkann nicht zugegriffen werden.

Jonathan Mayhak
quelle
15
Die Ideen hier sind für eine UNIX-CLI korrekt, aber die Befehle funktionieren nur für eine Debian-basierte Linux-Distribution und nicht für eine Windows-Umgebung des OP.
Jason Rikard
17
a2enmod rewrite hat den Job gemacht
Dr. Casper Black
98
Weiterer Hinweis: Sie müssen auch sicherstellen, dass die Konfiguration Ihrer Site vorhanden ist AllowOverride All, damit die .htaccessDatei überhaupt gelesen werden kann.
Adam Rosenfield
2
@ Tennis können Sie a2dismod rewrite verwenden
Jonathan Mayhak
3
Wie kann ich a2enmod rewritein Windows verwenden?
Naman
229

Für meine Situation hatte ich

RewriteEngine On

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

AllowOverride all

im <Directory>Abschnitt für die betreffende Site.

Mike Wazowski
quelle
10
Selbst mit a2enmod rewrite& RewriteEngine Onin the .htaccess- das Vorhandensein AllowOverride allin der VirtualHost-Datei verhindert, dass es funktioniert - hat mich dies AllowOverride all
überrascht und es so geändert
9
Anfänger hier .. wo ist die VirtualHost-Datei?
Davneet
3
Dies ist der richtige Weg ... Ich hatte alles andere eingestellt, außer dies.
Arrayown
2
Die AllowOverrideDirektive bestimmt die "Arten von Direktiven, die in .htaccessDateien erlaubt sind ". "Wenn diese Anweisung auf gesetzt ist None, werden .htaccessDateien vollständig ignoriert. In diesem Fall versucht der Server nicht einmal, .htaccessDateien im Dateisystem zu lesen ." Offizielle Dokumente: httpd.apache.org/docs/2.2/mod/core.html#allowoverride
John Erck
Dies hat es für mich behoben - ich hatte ein Problem mit WordPress-Permalinks, die nicht richtig funktionierten. Wenn Sie dies tun a2enmod rewriteund 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.
Jason Preston
83

Versuchen Sie die Einstellung : AllowOverride All.


Das zweithäufigste Problem ist, dass das Umschreiben von Mods nicht aktiviert ist: a2enmod rewriteund dann Apache neu starten.

Jarrod
quelle
Dies sollte die Antwort Nummer 1 sein, da es ein Problem löst, das in einer Standard-Ubuntu-Installation auftritt!
Sliq
1
Dadurch kann .htaccess jede andere Apache-Konfiguration überschreiben. Dies wird nicht empfohlen.
Bhargav Nanekalva
Ja :) das war auch mein Problem, aber hier ist der Ort, den Sie für Anfänger wie mich erklären, dass dieses "AllowOverride All" in /etc/apache2/sites-available/[sitename weibl.conf und [sitename-ssl] ist. .conf. Ich musste wegen dir eine zweite Recherche machen: D, übrigens danke!
MetaTron
77

Wenn dies nicht der Fall ist, bearbeiten Sie / etc / apache2 / sites-enabled / 000-default

fast oben finden Sie

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

Ändern Sie das AllowOverride NoneinAllowOverride All

das hat bei mir funktioniert

Martin Sax
quelle
Geänderter Fehler von /laravel/public/authors was not found on this serverzu/index.php was not found on this server
Gangaraju
<Verzeichnis> kann nicht gefunden werden, nur <VirtualHost *: 80>
Nicolas S.Xu
1
@ NicolasS.Xu platzieren Sie dies im <VirtualHost *: 80> -Tag
wimdetr
Ich habe das Gleiche getan, aber einen neuen Abschnitt hinzugefügt <Directory /var/www/html>, um die Regel nur ab diesem Ordner anzuwenden.
Louis Loudog Trottier
44

In Ubuntu:

Lauf:

a2enmod rewrite

und dann:

service apache2 restart

mod_rewrite wird jetzt aktiviert!

Nickleefly
quelle
28

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

  1. Öffnen Sie Ihre Konsole und geben Sie Folgendes ein:

    sudo a2enmod rewrite

  2. Starten Sie Ihren Apache-Server neu.

    service apache2 restart

Problem 2

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

  2. Suchen Sie "Verzeichnis / var / www /"

  3. Ä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.

  1. Geben Sie dies in die Konsole ein:

    sudo a2enmod userdir

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

Kripa Jayakumar
quelle
2
Großartige Aufschlüsselung des Problems.
Banago
Nicht verwenden, AllowOverride Allda dies zu viele gefährliche Funktionen aktiviert (z. B. die Verwendung von Perl-Skripten). Verwenden AllowOveride Options
Sie
28

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 geben apache2.conf. Sie müssen diese bearbeiten (Sie sollten über die Root-Berechtigung verfügen). Ä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.

Ijas Ahamed N.
quelle
Dies ist die aktuelle Antwort.
Paulc
1
Wenn Sie im Jahr 2019 und darüber hinaus sind, stimmen Sie dieser Antwort bitte zu :)
Luiz Cavalcanti
27

Öffnen Sie das Terminal und geben a2enmod rewriteSie es ein. Dadurch wird Ihr mod_rewriteModul für Apache aktiviert .

Gehen Sie dann zu /etc/apache2/sites-availableund 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

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>

Starten Sie nun Ihren Apache mit /etc/init.d/apache2 restartoder neuservice apache2 restart

Machen Sie erneut einen sauberen URL-Test und diesmal wird er bestanden.

Umesh Patil
quelle
15

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

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

Danny Battison
quelle
@gabehabe Ihr Avatar sah gerade so aus, als würde er ein Symbol in meinem Dokument enthalten, lol
Jonathan dos Santos
5

Ich habe das gerade gemacht

sudo a2enmod rewrite

Dann müssen Sie den Apache-Dienst mit dem folgenden Befehl neu starten

sudo service apache2 restart
user3470929
quelle
4

Alter Thread, möchte nur setzen, dass AllowOverride nicht auf alle gesetzt wird, sondern einen bestimmten Mod verwendet, den Sie verwenden möchten.

AllowOverride mod_rewrite mod_mime

Und diese Zeile sollte nicht kommentiert werden

LoadModule rewrite_module modules/mod_rewrite.so

Refrences

Abhishek Gurjar
quelle
4

Verwenden Sie den folgenden Befehl

sudo a2enmod rewrite

Und der Neustart von Apache über den folgenden Befehl

sudo service apache2 restart
Prasoon
quelle
3

Es gibt offensichtlich mehr als einen Weg, dies zu tun, aber ich würde vorschlagen, den Standard zu verwenden:

ErrorDocument 404 /index.php?page=404
Michael Cramer
quelle
3

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

Garrett Ellis
quelle
2

Was hat bei mir funktioniert (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 dies AllowOverride allim entsprechenden Abschnitt von festgelegt ist/etc/apache2/sites-available/default

Benubird
quelle