2009-06-15 6 views
1

Vielleicht vermisse ich etwas, aber ich kann das nicht herausfinden.

Ich habe eine RewriteRule:

RewriteRule ^view/(\w+)$ view.php?mmdid=$1 [L] 

und wenn ich nach mydomain.org/view/3 gehen, der $ _GET Array ist leer. Es gibt keinen Schlüssel 'mmdid'.

Allerdings, wenn ich meine Regel etwas ändern andere, wie zum Beispiel:

RewriteRule ^viewz/(\w+)$ view.php?mmdid=$1 [L] 

es funktioniert gut, wenn ich mydomain.org/viewz/3 besuchen. Ich bekomme Array ([mmdid] => 1) beim Drucken von $ _GET.

Es gibt keine anderen ähnlichen Regeln, die Konflikte verursachen könnten, und ich habe Apache neu gestartet.

Irgendwelche Ideen, warum das passiert? Ist 'view' ein Schlüsselwort oder etwas? Hier

ist der Inhalt des Rewrite-Log:

192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a61030/subreq] (1) [perdir /path/to/webroot/] pass through /path/to/webroot/view.php 
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (3) [perdir /path/to/webroot/] add path info postfix: /path/to/webroot/view.php -> /path/to/webroot/view.php/1 
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (3) [perdir /path/to/webroot/] strip per-dir prefix: /path/to/webroot/view.php/1 -> view.php/1 
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (3) [perdir /path/to/webroot/] applying pattern '^(.*)$' to uri 'view.php/1' 
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (4) [perdir /path/to/webroot/] RewriteCond: input='mydomain.org' pattern='^www\.mydomain\.org$' => not-matched 
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (1) [perdir /path/to/webroot/] pass through /path/to/webroot/view.php 
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2930e58/subreq] (1) [perdir /path/to/webroot/] pass through /path/to/webroot/1 

Hier wird die Ausgabe des Protokolls bei der Verwendung von nur^v/(\ w +) $ ....

192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) [perdir /path/to/webroot/] add path info postfix: /path/to/webroot/v -> /path/to/webroot/v/1 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) [perdir /path/to/webroot/] strip per-dir prefix: /path/to/webroot/v/1 -> v/1 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) [perdir /path/to/webroot/] applying pattern '^v/([0-9]+)$' to uri 'v/1' 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (2) [perdir /path/to/webroot/] rewrite 'v/1' -> 'view.php?mmdid=1' 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) split uri=view.php?mmdid=1 -> uri=view.php, args=mmdid=1 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) [perdir /path/to/webroot/] add per-dir prefix: view.php -> /path/to/webroot/view.php 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (2) [perdir /path/to/webroot/] strip document_root prefix: /path/to/webroot/view.php -> /view.php 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (1) [perdir /path/to/webroot/] internal redirect with /view.php [INTERNAL REDIRECT] 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (3) [perdir /path/to/webroot/] strip per-dir prefix: /path/to/webroot/view.php -> view.php 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (3) [perdir /path/to/webroot/] applying pattern '^v/([0-9]+)$' to uri 'view.php' 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (3) [perdir /path/to/webroot/] strip per-dir prefix: /path/to/webroot/view.php -> view.php 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (3) [perdir /path/to/webroot/] applying pattern '^(.*)$' to uri 'view.php' 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (4) [perdir /path/to/webroot/] RewriteCond: input='mydomain.org' pattern='^www\.mydomain\.org$' => not-matched 
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (1) [perdir /path/to/webroot/] pass through /path/to/webroot/view.php 

Thank Sie,

Antwort

2

Vielleicht kollidiert Ihr Skriptname mit dem Neuschreiben. Versuchen Sie, Ihr Skript in view.page.php umzubenennen, denn wenn Sie es neu schreiben, macht es keinen Unterschied, wie das Skript heißt.

Weitere Informationen, wie Sie Ihr Skript Verwendung aufgerufen wird

var_dump($_SERVER); 
+0

Das hat es geschafft! Vielen Dank.Dachte nicht einmal daran. Warum können Sie das Skript nicht das gleiche wie die Regel nennen? Kann jemand etwas Licht darauf werfen? – barfoon

+0

Für einige könnte es einen Unterschied machen, da es die Dinge im Webroot besser organisiert. – barfoon

+1

Das Umbenennen der Datei entfernt die Symptome eher als das Entfernen der Ursache. Und das ist keine gute Lösung. – Gumbo

1

'Ansicht' ist kein Schlüsselwort oder reserviertes Wort in irgendeiner Weise.

(Gelöschte Debug-Informationen, die uns zur Lösung führte)

vorsichtig in die Rewrite-Protokolle Blick sehe ich diese Zeile:

applying pattern '^(.*)$' to uri 'view.php/1' 

diese Zeile zeigt Ihnen MultiViews aktiviert haben (weil Ihre Anfrage nicht ist view.php/1, aber view/1), so dass view/intern in view.php/konvertiert wird, bevor die Engine zum Umschreiben aufgerufen wird, da eine Datei mit demselben Namen und einer bekannten Erweiterung vorhanden ist. Sie können MultiViews für diese Datei oder dieses Verzeichnis entweder deaktivieren oder den Namen des Skripts oder Verzeichnisses ändern, damit das MultiView nicht ausgelöst wird.

+0

Ich habe die Ausgabe des Log @ Level 9 gepostet, andere Regeln gelöscht und die Seite einmal angefordert. – barfoon

+0

Ja, ich habe 2 Regeln zur Entfernung www: RewriteCond% {HTTP_HOST}^www \ .mydomain \ .org $ RewriteRule^(. *) $ Http://mydomain.org/$1 [R = 301, L] – barfoon

1

Es ist wahrscheinlich MultiViews, die dieses Verhalten verursacht. Versuchen Sie, es zu deaktivieren:

Options -MultiViews 
0

Vinko hat es richtig, denke ich, mit dem RewriteCond Problem. Ihre Regel zum Umschreiben von "View" hat eine Bedingung, die nicht erfüllt wird. Daher wird sie nie getestet.

Verwandte Themen