fragen stichworte

Warum funktioniert diese RewriteRule-Direktive nicht in der .htaccess-Datei?

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

antworten

Fügen Sie dies einfach Ihrer .htaccess-Datei

hinzu
Options -MultiViews

Ich hatte das gleiche Problem stundenlang

Ich weiß nicht warum, aber es ist standardmäßig unter OSX

aktiviert

fü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