Aktivieren Sie das URL-Umschreiben (mod_rewrite) mithilfe von .htaccess-Dateien in ~/Sites auf Lion

Ich kann mod_rewrite nicht auf Lion zum Laufen bringen. Ich entwickle eine Reihe von Websites lokal in ~/Sites unter Verwendung von .htaccess-Dateien. Ich bin auf 10.7.3 und habe keine Konfigurationsdateien berührt, außer der Aktivierung von PHP in httpd.conf (was funktioniert).

Ich weiß, dass es hier mindestens 2 Fragen dazu gibt, aber die dort aufgeführten Lösungen funktionieren nicht. Die anderen Lösungen, die ich im Internet gefunden habe, auch nicht. Ich muss etwas Dummes tun oder etwas übersehen, sonst werde ich wahrscheinlich verrückt, aber es funktioniert nicht.

Ich habe alle üblichen Sachen ausprobiert:

  1. /private/etc/apache2/users/<myusername>.confWechseln Sie in AllowOverride Nonezu AllowOverride Allund starten Sie den Webserver neu

  2. Ändern Sie außerdem in /private/etc/apache2/httpd.confalle/alle Vorkommen von AllowOverride Nonein AllowOverride All-- Ich habe es an all den verschiedenen Stellen versucht, an denen diese Anweisungen zu finden sind

  3. Probieren Sie grundsätzlich alle möglichen Kombinationen von Werten für die OptionsLinie über/unter der AllowOverrideLinie aus, einschließlich der Werte:Indexes MultiViews FollowSymLinks All

Den Webserver nach einer solchen Änderung natürlich immer neu starten. Nichts davon funktioniert. Alle meine sauberen URLs funktionieren einfach nicht; Ich erhalte eine 404 - nicht gefunden. Das Fehlerprotokoll von Apache gibt mir nur "Datei existiert nicht:" Fehler. Es scheint also, dass das mod_rewrite-Modul überhaupt nicht funktioniert.

Ich habe dafür gesorgt, dass mod_rewrite in die httpd.conf geladen ist, was es auch ist; bei einer Lion-Installation ist dies standardmäßig der Fall.

Das Verrückte ist, dass alles perfekt funktioniert hat – bis ich auf eine neue Maschine mit Lion migrierte. Das heißt, ich schließe einen Fehler in meinen .htaccess-Dateien aus, weil ich weiß, dass es vorher funktioniert hat. Wenn es sich um einen Fehler in der .htaccess handelte, würde ich auch eine Art Fehlermeldung vom mod_rewrite-Modul im error_log von Apache erhalten, die mir zumindest mitteilt, dass das Modul selbst aufgerufen wird. Aber das passiert nicht.

Übersehe ich etwas? Muss ich die Konfigurationseinstellungen woanders ändern? Muss ich die Konfiguration von PHP ändern? Warum funktionieren die Anweisungen (wie Aktivieren von mod_rewrite unter MacOSX Lion und wie man mod_rewrite unter Mac OS X zum Laufen bringt ) für andere Leute, aber nicht für mich? :)

Ich habe damit schon Stunden verschwendet. Jede Hilfe wäre sehr willkommen.

Übrigens, ich möchte MAMP nicht verwenden. Ich habe zuvor MAMP verwendet und es hat mit MySQL, das sich bereits auf meinem System befindet, nicht gut funktioniert. Das würde einen Kopfschmerz durch einen anderen Kopfschmerz ersetzen, also nein danke :)
Übrigens bin ich auf Standard OS X Lion, NICHT Lion Server.
Dies beantwortet die Frage nicht, aber eine Alternative zum Ringen mit der lokalen Umgebung Ihres Macs für die Webentwicklung ist die Verwendung von etwas wie Vagrant , mit dem Sie Konfigurationen für virtuelle Maschinen einfach einrichten und verwalten können.

Antworten (6)

Sie sollten sicherstellen, dass in Ihrer /etc/apache2/users/username.conf Folgendes steht:

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

Wesentlich sind hier die FollowSymlinks und AllowOverride. Während Sie in Ihrer Frage auf beides hinweisen, haben Sie diese möglicherweise nicht korrekt zusammen konfiguriert.

Stellen Sie sicher, dass in httpd.conf /private/etc/apache2/extra/httpd-userdir.conf ebenfalls enthalten ist. Es ist standardmäßig.

Starten Sie nach allen Änderungen den Webserver neu, damit die Änderungen wirksam werden.

Wenn Sie immer noch Probleme haben, liegt möglicherweise ein Problem mit Ihren tatsächlichen Umschreibungsregeln vor. Haben Sie sie zuvor auch in einem .htaccess-Kontext verwendet? Beachten Sie, dass in einer .htaccess-Datei die Rewrite-Regel-Regex mit einem Anforderungs-URI ohne führenden Schrägstrich und immer relativ zu dem Verzeichnis, in dem sich die .htaccess -Datei befindet, abgeglichen wird , während in einer globalen httpd.conf die URI mit einem führenden Schrägstrich übereinstimmen muss und ist relativ zum Webstamm. Da Sie Ihre .htaccess-Datei vermutlich in einem Unterverzeichnis von ~/Sites haben, verhalten sich Ihre Rewrite-Regeln möglicherweise anders, als wenn sich die .htaccess-Datei im Webstamm eines (virtuellen) Hosts befindet.

Um mod_rewrite zu debuggen, können Sie die Rewrite-Protokollierung aktivieren. Sie sollten das in /etc/apache2/httpd.conf aktivieren:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log
Danke Gerri. Ja, das habe ich versucht; habe es gerade nochmal versucht; funktioniert leider nicht. Die .htaccess habe ich nicht geändert, sie liegt wie vorher in ~/Sites/…. Das ist zu frustrierend :(
Versuchen Sie, die Protokollierung zum Umschreiben zu aktivieren, wie ich es oben geändert habe.
OK, es scheint überhaupt kein Problem mit mod_rewrite zu geben; Es ist die .htaccess-Datei, die vollständig ignoriert wird. Ich kann jeden Müll hineinlegen und bekomme keine Fehlermeldung. Apache lädt es also nicht. Ich habe die Berechtigungen überprüft, sie sind in Ordnung (die Datei ist weltweit lesbar). Ich habe versucht, es ausführbar zu machen, keine Änderung.
Wenn ich eine .htaccess in /Library/WebServer/Documents platziere und " localhost " öffne, um es zu testen, funktioniert dies wie erwartet. Es funktioniert einfach nicht in "~/Sites".
Ich habe etwas Verrücktes gemacht und ein zweites Benutzerkonto mit dem Loginnamen „testitester“ erstellt. Ich habe AllowOverride in der .conf dieses Benutzers auf All gesetzt. Ich habe eine .htaccess-Datei mit Müll im Sites-Ordner dieses Benutzers abgelegt. Wenn ich zu localhost/~testitester gehe, erhalte ich wie erwartet einen 500-Fehler.
Mein eigener Login-Name ist "me". Wenn ich genau das Gleiche mache, was ich oben mit testitester gemacht habe, bekomme ich keinen Fehler; die .htaccess-Datei wird ignoriert. Ich gehe morgen in eine Psychiatrie.
Der letzte Satz war natürlich ein Witz, aber im Ernst, das macht überhaupt keinen Sinn.
Ich weiß, dass dies keine direkte Antwort auf Ihr Problem ist, aber haben Sie darüber nachgedacht, stattdessen virtuelle Hosts einzurichten?

Das Hinzufügen von Optionen + FollowSymLinks hat bei mir gut funktioniert

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule
womit macht es das Options +FollowSymLinks? Ich füge einfach diese Zeile hinzu, es funktioniert für mich

Ich hatte ein ähnliches Problem, bei dem meine .htaccess-Datei vollständig ignoriert wurde, während sie sich in einem Unterordner in meinem ~/Sites-Verzeichnis unter einem korrekt eingerichteten VirtualHost befand.

Nachdem ich die letzte Stunde damit verbracht hatte, mit verschiedenen Konfigurationsdateien herumzuspielen und AllowOverride All an verschiedenen Stellen einzustellen, fand ich schließlich heraus, dass die .htaccess-Datei, obwohl sie im Finder wie eine .htaccess-Datei aussah, tatsächlich eine .htaccess.txt-Datei mit der .htaccess.txt-Datei war Erweiterung versteckt.

Um Ihre .htaccess-Datei zu überprüfen und zu ändern, klicken Sie mit der rechten Maustaste darauf und wählen Sie Get Info und stellen Sie dann sicher, dass Sie alle führenden Erweiterungen am Ende entfernen, wie z. B. die, die ich hatte:

Und jetzt funktioniert es!

Unten .htaccess-Einträge beheben für mich

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>

Platzieren Sie .htaccess in /Library/WebServer/Documents und öffnen Sie "localhost/"; zum Testen, funktioniert wie erwartet. Es funktioniert einfach nicht in "~/Sites". Danke Niels Heidenreich dafür!

Wenn Sie Folgendes eingeben: /Benutzer/Benutzername/App_Name

Das / bezieht sich auf das Stammverzeichnis des Webservers:

"localhost/"

Wenn Sie /~username/app_name in Ihrer Umschreibung verwenden, sollte es funktionieren.

Pfade, die mit beginnen /, sind immer absolute Pfade für Apache, siehe Definition von Webserver-Root in http.conf ( <Directory "/Library/WebServer/Documents">)