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

13

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

Ich weiß, dass es hier mindestens zwei Fragen gibt, aber die dort aufgeführten Lösungen funktionieren nicht. Auch die anderen Lösungen, die ich im Web gefunden habe. 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. In /private/etc/apache2/users/<myusername>.confändern , AllowOverride Noneum AllowOverride Allden Web - Server und neu starten

  2. Zusätzlich kann in /private/etc/apache2/httpd.confändern, jede / alle Vorkommen (en) AllowOverride Nonezu AllowOverride All- ich habe versucht , es in all den verschiedenen Orten , an denen diese Richtlinien zu finden sind

  3. Probieren Sie grundsätzlich alle möglichen Wertekombinationen für die OptionsZeile über / unter der AllowOverrideZeile aus, einschließlich der folgenden Werte:Indexes MultiViews FollowSymLinks All

Nach einer solchen Änderung muss der Webserver natürlich immer neu gestartet werden. Nichts davon funktioniert. Alle meine sauberen URLs funktionieren einfach nicht. Ich bekomme eine 404 - nicht gefunden. Das Fehlerprotokoll von Apache gibt nur die Fehlermeldung "Datei existiert nicht:" aus. Es scheint also, dass das Modul mod_rewrite überhaupt nicht funktioniert.

Ich habe dafür gesorgt, dass mod_rewrite in die httpd.conf geladen wird. Dies ist bei einer Lion-Installation standardmäßig der Fall.

Das Verrückte ist, dass alles perfekt funktioniert hat - bis ich auf eine neue Maschine mit Lion umgestiegen bin. Das heißt, ich schließe einen Fehler in meinen .htaccess-Dateien aus, weil ich weiß, dass er zuvor funktioniert hat. Wenn es sich um einen Fehler in der .htaccess-Datei handelt, würde das Modul "mod_rewrite" in Apaches "error_log" eine Fehlermeldung ausgeben, die zumindest darauf hinweist, dass das Modul selbst aufgerufen wird. Aber das passiert nicht.

Übersehen ich etwas? Muss ich die Konfigurationseinstellungen an einer anderen Stelle ändern? Muss ich die PHP-Konfiguration ändern? Warum funktionieren die Anweisungen (wie " Wie aktiviere ich mod_rewrite unter MacOSX Lion und lasse mod_rewrite unter Mac OS X funktionieren") für andere Benutzer, aber nicht für mich? :)

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

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

Antworten:

12

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

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

Die FollowSymlinks und AllowOverride sind hier unerlässlich. Während Sie beide in Ihrer Frage anspielen, haben Sie diese möglicherweise nicht richtig konfiguriert.

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

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

Wenn Sie immer noch Probleme haben, liegt möglicherweise ein Problem mit Ihren tatsächlichen Umschreiberegeln vor. Haben Sie sie zuvor auch in einem .htaccess-Kontext verwendet? Beachten Sie, dass in einer .htaccess- Datei die reguläre Schreibregel regex mit einem Anforderungs-URI ohne den führenden Schrägstrich verglichen wird und sich immer auf das Verzeichnis bezieht, in dem sich die .htaccess- Datei befindet , wohingegen in einer globalen httpd.conf-Datei der URI mit einem führenden Schrägstrich übereinstimmen muss und lautet relativ zum web root. Da Sie vermutlich über Ihre .htaccess-Datei in einem Unterverzeichnis von ~ / Sites verfügen, können sich Ihre Umschreiberegeln anders verhalten, als wenn sich die .htaccess-Datei im Webstamm eines (virtuellen) Hosts befindet.

Zum Debuggen von mod_rewrite können Sie die Umschreibeprotokollierung aktivieren. Sie sollten das in /etc/apache2/httpd.conf aktivieren:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log
Gerry
quelle
Danke Gerry. Ja, das habe ich versucht. habe es einfach nochmal versucht; funktioniert leider nicht. Ich habe den .htaccess nicht geändert, er befindet sich wie zuvor in ~ / Sites /…. Das ist zu frustrierend :(
Niels Heidenreich
Versuchen Sie, die Umschreibeprotokollierung wie oben geändert zu aktivieren.
Gerry
OK, es ist überhaupt kein Problem mit mod_rewrite, wie es scheint; Es ist die .htaccess-Datei, die vollständig ignoriert wird. Ich kann jeden Müll hineinlegen und bekomme keine Fehlermeldung. Also lädt Apache es 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.
Niels Heidenreich
Wenn ich eine .htaccess-Datei in / Library / WebServer / Documents platziere und zum Testen " localhost " öffne , funktioniert dies wie erwartet. Es funktioniert einfach nicht in "~ / Sites".
Niels Heidenreich
Ich habe etwas verrücktes gemacht und ein zweites Benutzerkonto mit dem Login-Namen "testitester" angelegt. Ich habe AllowOverride in der .conf dieses Benutzers auf All gesetzt. Ich habe eine .htaccess-Datei mit Junk-Inhalten im Sites-Ordner dieses Benutzers abgelegt. Wenn ich zu localhost / ~ testitester gehe, erhalte ich erwartungsgemäß einen Fehler von 500.
Niels Heidenreich
1

Das Hinzufügen von Optionen + FollowSymLinks hat für mich gut funktioniert

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule
maseth
quelle
Womit macht es Options +FollowSymLinks? Ich füge nur die Zeile hinzu, die für mich funktioniert
Kannika
1

Ich hatte ein ähnliches Problem, bei dem meine .htaccess-Datei in einem Unterordner in meinem ~ / Sites-Verzeichnis unter einem VirtualHost, der korrekt eingerichtet wurde, vollständig ignoriert wurde.

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 Info abrufen. Stellen Sie dann sicher, dass am Ende alle führenden Erweiterungen entfernt sind, z. B .:

Und jetzt funktioniert es!

Jarada
quelle
1

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

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>
Charles J
quelle
0

Platziere .htaccess in / Library / WebServer / Documents und öffne "localhost /"; zum testen funktioniert es wie erwartet. Es funktioniert einfach nicht in "~ / Sites". Danke Niels Heidenreich dafür!

Varun Bhatia
quelle
-1

Wenn Sie Folgendes eingeben: / Users / Benutzername / Anwendungsname

Das / verweist auf das Stammverzeichnis des Webservers:

"localhost /"

Wenn Sie beim Umschreiben / ~ Benutzername / Anwendungsname verwenden, sollte dies funktionieren.

Bisteces
quelle
1
Pfade, die mit beginnen, /sind für Apache immer absolute Pfade, siehe Definition des Webserver-Stamms in http.conf ( <Directory "/Library/WebServer/Documents">)
nohillside