Ich habe eine Website, die auf einem Linux El Cheapo-Hosting-Service gehostet wurde, den ich auf meinen Mac OS X 10.5 Leopard Server-Server mit Apache 2.2.8 & amp; PHP 5.2.5 w/rewrite_module aktiviert und AllowOverride All
, aber ich habe ein Problem mit den folgenden Zeilen in der Datei .htaccess
:
RewriteEngine On
#RewriteRule ^view/([^/\.]+)/?$/view.php?item=$1 [L]
#RewriteRule ^order/([^/\.]+)/?$/order.php?item=$1 [L]
RewriteRule ^category/([^/\.]+)/?$/category.php?category=$1 [L]
Wie Sie sehen, habe ich die RewriteRule
-Anweisungen für /view/
und /order/
auskommentiert, so dass ich mich nur mit /category/
beschäftige. Wenn ich versuche, http://domain.tld/category/2/
zu laden, wird category.php
ausgeführt (ich habe den Debug-Code zur Bestätigung hinzugefügt), aber $_SERVER['REQUEST_URI']
wird als /category/2/
und $_GET['category']
als leer angezeigt.
Normalerweise bin ich mit der Fehlerbehebung von .htaccess-Dateien und mod_rewrite-Direktiven zufrieden, aber diese hat mich aus irgendeinem Grund stumm gemacht.
Update: Ich folgte Joshs Vorschlag. Hier ist das, was mod_rewrite.log
ausgegeben wurde, wenn ich versuche, auf http://domain.tld/category/2/
zuzugreifen:
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (2) init rewrite engine with requested uri/category/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (3) applying pattern '.*' to uri '/category/13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (1) pass through/category/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6aa98/subreq] (3) [perdir/Library/WebServer/Documents/tld.domain.www/] add path info postfix:/Library/WebServer/Documents/tld.domain.www/category.php ->/Library/WebServer/Documents/tld.domain.www/category.php/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6aa98/subreq] (3) [perdir/Library/WebServer/Documents/tld.domain.www/] strip per-dir prefix:/Library/WebServer/Documents/tld.domain.www/category.php/13 -> category.php/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6aa98/subreq] (3) [perdir/Library/WebServer/Documents/tld.domain.www/] applying pattern '^category/([^/\.]+)/?$' to uri 'category.php/13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6aa98/subreq] (1) [perdir/Library/WebServer/Documents/tld.domain.www/] pass through/Library/WebServer/Documents/tld.domain.www/category.php
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (3) [perdir/Library/WebServer/Documents/tld.domain.www/] add path info postfix:/Library/WebServer/Documents/tld.domain.www/category.php ->/Library/WebServer/Documents/tld.domain.www/category.php/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (3) [perdir/Library/WebServer/Documents/tld.domain.www/] strip per-dir prefix:/Library/WebServer/Documents/tld.domain.www/category.php/13 -> category.php/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (3) [perdir/Library/WebServer/Documents/tld.domain.www/] applying pattern '^category/([^/\.]+)/?$' to uri 'category.php/13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (1) [perdir/Library/WebServer/Documents/tld.domain.www/] pass through/Library/WebServer/Documents/tld.domain.www/category.php
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (2) init rewrite engine with requested uri/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (3) applying pattern '.*' to uri '/13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (1) pass through/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (3) [perdir/Library/WebServer/Documents/tld.domain.www/] strip per-dir prefix:/Library/WebServer/Documents/tld.domain.www/13 -> 13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (3) [perdir/Library/WebServer/Documents/tld.domain.www/] applying pattern '^category/([^/\.]+)/?$' to uri '13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (1) [perdir/Library/WebServer/Documents/tld.domain.www/] pass through/Library/WebServer/Documents/tld.domain.www/13
Fügen Sie dies einfach Ihrer .htaccess-Datei
hinzuOptions -MultiViews
Ich hatte das gleiche Problem stundenlang
Ich weiß nicht warum, aber es ist standardmäßig unter OSX
aktiviertführt zu einem Fehler, da beim Laden von category/ die category.php gefunden wird und alles nach dem Schrägstrich auf diese Datei umgeleitet wird
Haben Sie Zugriff auf httpd.conf? In diesem Fall fügen Sie bitte httpd.conf hinzu:
RewriteLog "/tmp/mod_rewrite.log"
RewriteLogLevel 3
Geben Sie an, was in diesem Protokoll beim Laden von /category/2
angezeigt wird. Entfernen Sie dies, nachdem Sie die erforderlichen Informationen erhalten haben - es ist sehr verschwenderisch für Serverressourcen.
BEARBEITEN:
Danke für das Protokoll. Die URL wird von etwas neu geschrieben: /category.php/13
. Irgendwelche anderen RewriteRules? Verwenden Sie FastCGI? Was ist, wenn Sie category.php
in etwas anderes umbenennen, wie Category.php
oder display_category.php
?
EDIT2:
Da etwas scheint, /category/(.*)
in /category/$1
umzuschreiben, und wir wissen nicht, was es ist, warum ändern Sie nicht:
RewriteRule ^category/([^/\.]+)/?$/category.php?category=$1 [L]
an:
RewriteRule ^category.php/([^/\.]+)/?$/category.php?category=$1 [L]
und sehen, ob das funktioniert?
Ich bin wahrscheinlich ein Idiot hier, aber ist das nicht das erwartete Verhalten? Mod_rewrite ändert die URL inline, um die Datei zu finden. Die von PHP angezeigten Umgebungsvariablen ändern sich normalerweise nicht.
Ich denke, Sie müssen die REQUEST_URI-Zeichenfolge analysieren, um die Kategorievariable herauszuziehen.
Markieren Sie