.htaccess funktioniert nicht Apache

135

Ich habe einen Server vom AWS EC2-Dienst, der unter Linux Ubuntu ausgeführt wird, und ich habe Apache, PHP und MySQL installiert.

Ich habe eine .htaccessDatei in meinem Dokumentstamm hinzugefügt /var/www/html.

Ich habe diesen Code eingegeben: ErrorDocument 404 /var/www/html/404.phpund er wird immer noch nicht angezeigt.

Ich habe diesen Befehl mehrmals eingegeben: sudo service httpd restartum den Server neu zu starten, aber keine Änderungen angezeigt ...

Wie kann ich das beheben ... Habe ich etwas falsch gemacht?

Danke im Voraus!

Shalin Shah
quelle
2
Möchten Sie den 400 Bad RequestFehler wirklich zuordnen /var/www/html/404.php?
Jon Lin

Antworten:

287

Beachten Sie zunächst, dass ein Neustart von httpd für .htaccess-Dateien nicht erforderlich ist. .htaccess-Dateien sind speziell für Personen gedacht, die kein Root-Verzeichnis haben, dh keinen Zugriff auf die Konfigurationsdatei des httpd-Servers haben und den Server nicht neu starten können. Da Sie den Server neu starten können, benötigen Sie keine .htaccess-Dateien und können die Hauptserverkonfiguration direkt verwenden.

Zweitens, wenn .htaccess-Dateien ignoriert werden, müssen Sie überprüfen, ob AllowOverride richtig eingestellt ist. Weitere Informationen finden Sie unter http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride . Sie müssen auch sicherstellen, dass es im richtigen Bereich eingestellt ist - dh im richtigen Block in Ihrer Konfiguration. Stellen Sie beispielsweise sicher, dass Sie die im Block NICHT bearbeiten.

Drittens, wenn Sie sicherstellen möchten, dass eine .htaccess-Datei tatsächlich gelesen wird, legen Sie Müll hinein. Eine ungültige Zeile wie "UNGÜLTIGE LINIE HIER" in Ihrer .htaccess-Datei führt zu einem 500-Server-Fehler, wenn Sie Ihren Browser auf das Verzeichnis richten, das diese Datei enthält. Wenn dies nicht der Fall ist, ist AllowOverride nicht richtig konfiguriert.

Rich Bowen
quelle
141
+1 für das Einfügen von Müll in die .htaccess-Datei als Diagnosetool.
Retrohacker
46
Müll in der Programmierung ist nützlicher als es klingt.
EnKrypt
1
Ich habe "A STRING" in meinen .htaccess geputtet , damit ich einen Fehler erhalte, also habe ich AllowOverride Allalles apache2.confin mein Debian geputtet und es funktioniert
Alex
1
Beachten Sie, dass dies AllowOverridenur in <Directory>Direktiven funktioniert und ignoriert wird, wenn es in einem <Location ...>Abschnitt platziert wird. Siehe: httpd.apache.org/docs/2.4/mod/core.html#allowoverride
Daniel Sokolowski
2
Beachten Sie auch, dass die <Directory>Direktive einen absoluten Pfad anstelle eines relativen Pfads erwartet. In meinem Fall während der Arbeit <Directory /> fehlgeschlagen<Directory /var/www/html/subdir> .
Lukas Knuth
115
  1. Aktivieren Sie das Apache mod_rewrite-Modul

    a2enmod rewrite

  2. Fügen Sie den folgenden Code hinzu /etc/apache2/sites-available/default

    AllowOverride All

  3. Starten Sie Apache neu

    /etc/init.d/apache2 restart

Sijo Thomas Maprayil
quelle
7
Beachten Sie, dass in Apache 2.4 die Konfigurationsdateien unter / etc / apache2 / sites-available jetzt in .conf enden müssen. Und ich hatte einige Verwechslungen auf meinem Server mit einer default.conf in / etc / apache2 / sites-available und einer in / etc / apache2 /
rubo77
2
Vielen Dank, in meinem Fall war das Umschreiben in apache2
Cross
Ich folge diesen Schritten bereits, aber es funktioniert nicht in Apache 2.4, was ich falsch mache = [
Luciano Andress Martini
Es sieht so aus, als ob IP-Überschreibungen erforderlich sind, die eine Authentifizierung erfordern. Dieses Verhalten ist unerwartet (von bestimmten IP-Adressen in Apache 2.2 nicht zulassen) und kann meiner Meinung nach sehr gefährlich sein, da die IP-Ausnahme die Authentifizierung anuliert. In Apache 2.2 handelt es sich um völlig andere Dinge !
Luciano Andress Martini
Ich habe den ersten Schritt ausgelassen, aber AllowOverride in meiner apache.conf (Debian 8, /etc/apache2/apache.conf) in All geändert, neu gestartet und die Dateien sind nicht zugänglich, gut. Aber der Fehler ist nicht wie die verweigerte Berechtigung, sondern 500 Internal Server Error, warum ist das so? Kann ich das beheben?
dasLort
44

Wenn Sie alle oben genannten Punkte ausprobiert haben, die alle gültige und gute Antworten sind, und Ihre htaccess-Datei nicht funktioniert oder gelesen wird, ändern Sie die Anweisung in der apache2.confDatei. Unter Ubuntu ist der Pfad/etc/apache2/apache2.conf

Ändern Sie die <Directory>Anweisung, die auf Ihre öffentlichen Webseiten verweist, auf denen sich die htaccess-Datei befindet. Wechseln Sie von AllowOverride NonezuAllowOverride All

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Ich hatte das gleiche Problem und fand die Antwort und Erklärung auf der Ubuntu Ask! Forum /ubuntu/421233/enabling-htaccess-file-to-rewrite-path-not-working

user1946891
quelle
2
Oder es kann auf dem
VHost
Tatsächlich ist nur AllowOverride FileInfoin der 3. Zeile erforderlich, damit die .htaccessDatei gelesen und verwendet werden kann. AllAktiviert auch zusätzliche Konfigurationsüberschreibungen, z. B. .httpasswd(die einzeln aktiviert werden können, indem Authconfiganstelle von verwendet wird All).
Rafal
20

Führen Sie für Ubuntu zunächst den folgenden
Befehl aus:

sudo a2enmod rewrite

Bearbeiten Sie dann die Datei /etc/apache2/sites-available/000-default.confmit nano oder vim mit folgendem Befehl: -

sudo nano /etc/apache2/sites-available/000-default.conf

000-default.confFügen Sie dies dann in der Datei nach der Zeile hinzu DocumentRoot /var/www/html. Wenn Ihr HTML-Stammverzeichnis etwas anderes ist, schreiben Sie Folgendes: -

<Directory "/var/www/html">
  AllowOverride All
</Directory>

Nachdem Sie alles getan haben, starten Sie Apache mit dem Befehl neu sudo service apache2 restart

Deval Khandelwal
quelle
6

Folgen Sie einfach 3 Schritten

  1. Aktivieren Sie mode_rewrite mit dem folgenden Befehl

    sudo a2enmod umschreiben

Passwort wird abgefragt. Geben Sie also Ihr Passwort ein

  1. Aktualisieren Sie Ihre Datei 000-default.conf oder default.conf im Verzeichnis / etc / apache2 / sites-available / . Sie können es nicht direkt bearbeiten. Verwenden Sie zum Öffnen den folgenden Befehl

    sudo gedit /etc/apache2/sites-available/000-default.conf

Oder sudo gedit /etc/apache2/sites-available/default.conf

Sie erhalten

DocumentRoot / var / www / html

ODER

DocumentRoot / var / www

Linie. Fügen Sie danach den folgenden Code hinzu.

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Stellen Sie dem Benutzer sicher, dass der Verzeichnis-Tag-Pfad mit dem in Ihrer Datei angegebenen übereinstimmt.

  1. Starten Sie Ihren Apache-Server mit dem folgenden Befehl neu

    sudo service apache2 neu starten

Rameshwer Dhanora
quelle
Vielen Dank. Grüße aus Brasilien.
Fox.11
5

Höchstwahrscheinlich ist AllowOverride auf None eingestellt. im Verzeichnisbereich der Datei apache2.conf im Ordner / etc / apache2

Versuchen Sie es auf AllowOverride All

KawaiKx
quelle
5

Nach meiner Erfahrung verhindert die Verzeichnisverzeichnis / var / www / die Direktive virtualhost. Wenn Sie also alle Vorschläge ausprobiert haben und immer noch nicht funktionieren und virtuelle Hosts verwenden, versuchen Sie dies.

1 - Stellen Sie sicher, dass Sie AllowOverride AllDirektive in haben /etc/apache2/sites-available/example.com.conf

2 - Überprüfen Sie die Direktiven / var / www / Directory in /etc/apache2/apache2.conf(möglicherweise in Zeile 164), wie es aussieht.

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Wenn es eine AllowOverride NoneDirektive gibt, ändern Sie sie in AllowOverride All oder einfach in die Escape-Zeile

Erdinç Çorbacı
quelle
3

Standardmäßig verbietet Apache die Verwendung einer .htaccess-Datei zum Anwenden von Umschreiberegeln

Schritt 1 - Aktivieren von mod_rewrite (falls nicht aktiviert ) Zuerst müssen wir mod_rewrite aktivieren. Es ist verfügbar, aber bei einer sauberen Apache 2-Installation nicht aktiviert.

$ sudo a2enmod rewrite

Dadurch wird das Modul aktiviert oder Sie werden darauf hingewiesen, dass das Modul bereits aktiviert ist. Starten Sie Apache neu, um diese Änderungen zu übernehmen.

$ sudo systemctl restart apache2

mod_rewrite ist jetzt vollständig aktiviert. Im nächsten Schritt richten wir eine .htaccess-Datei ein, mit der wir Umschreiberegeln für Weiterleitungen definieren.

Schritt 2 - Einrichten von .htaccess Öffnen Sie die Standard-Apache-Konfigurationsdatei mit nano oder Ihrem bevorzugten Texteditor.

$ sudo nano /etc/apache2/sites-available/000-default.conf

In dieser Datei finden Sie einen Block, der in der ersten Zeile beginnt. Fügen Sie innerhalb dieses Blocks den folgenden neuen Block hinzu, damit Ihre Konfigurationsdatei wie folgt aussieht. Stellen Sie sicher, dass alle Blöcke richtig eingerückt sind.

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    . . . 
</VirtualHost>

Speichern und schließen Sie die Datei. Starten Sie Apache neu, um diese Änderungen zu übernehmen.

$ sudo systemctl restart apache2

Getan. Ihre .htacess sollte funktionieren. Dieser Link kann tatsächlich jemandem helfen, https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04

Abayomi Israel
quelle
Der Neustartbefehl, der für mich funktioniert hat, ist $ sudo httpd -k restart(Red Hat 4.4.7-23)
Himalaya Garg
3

Ich habe diese Verwendung freigegeben. Wenn Sie diese Site verwenden, klicken Sie hier . Befolgen Sie die Schritte, die bis zur Ubuntu-Version 18.04 ausgeführt werden

Raghul SK
quelle
1

Im WampServerOpen WampServer Tray-Symbol ----> Apache ---> Apache-Module ---> rewrite_module

Buru
quelle
0

Verwenden Sie RewriteBase / {Ihr Ordner} / für Ihren .htaccess

Miftah al Rasyid
quelle
0

Der Vollständigkeit halber können Sie dieses Problem debuggen, wenn "AllowOverride All" Ihr Problem nicht behebt:

  1. Führen Sie aus apachectl -Sund prüfen Sie, ob Sie mehr als einen Namen haben. Möglicherweise sucht httpd nach .htaccess eines anderen DocumentRoot.

  2. Verwenden Sie strace -f apachectl -Xund suchen Sie, wo es geladen wird (oder nicht) .htaccess from.

Gilm
quelle