mod-rewrite THE_REQUEST und (REQUEST_URI oder REQUEST_FILE) geben einen anderen Dateinamen an - warum?
Ich war das Experimentieren mit mod-rewrite. Ich dachte, was ich wollte, war einfach, aber ich bekomme nicht die angeforderte Datei URI über REQUEST_URI. Eher die delived name weitergegeben wird.
Den Handbuch sagt:
THE_REQUEST
Den vollständigen HTTP-request
Zeile gesendet, die vom browser an den server
(z.B. "GET /index.html HTTP/1.1").
Dies stellt keine zusätzliche
gesendeten Header durch den browser. Diese
Wert wurde nicht unescaped
(dekodiert), im Gegensatz zu den meisten anderen Variablen
unten.REQUEST_URI
Die Ressource angefordert
in der HTTP-Anforderung Linie. (In der
obigen Beispiel wäre dies
"/index.html".)
Doch die beiden geben verschiedenen Datei-Namen in meinen tests. Ich habe einen bootstrap.php durch die ich wollte senden Sie alle Anfragen. Dies ist der test-Datei:
<?php
echo $_GET['requestedURI'];
?>
auf dem .htaccess-Datei habe ich:
### REWRITE RULES ###
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .+ bootstrap.php?requestedURI=%{REQUEST_URI} [L]
Anfordern http://localhost/test.htm
stellt heraus: /bootstrap.php
wenn ich THE_REQUEST statt REQUEST_URI in der .htaccess bekomme ich GET /test.htm HTTP/1.1
Also warum sich nicht THE_REQUEST? Naja, sobald ein query-string vorhanden ist, Dinge zu brechen. Wenn ich Anfrage: http://localhost/test.htm?x=1&y=2
bekomme ich GET /test.htm?x=1 die erste kaufmännische und Dinge zerbricht. Ich denke, es sollte möglich sein, zum alle zu ersetzen kaufmännische und-Zeichen im querystring mit %26, so dass es funktionieren würde, aber ich habe es nicht geschafft bisher...
Also kann mir jemand sagen, warum REQUEST_URI ausfällt und wie es zu lösen ist oder wie umschreiben Sie das kaufmännische und-Zeichen zu " %26 in den query-string?
Dank.
EDIT: Die oben genannten Berichts für xampp 1.7.3 auf Win 7. Ich versuchte es auf eine Produktion Linux-system in der Zwischenzeit und es REQUEST_URI gibt, was es sollte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht explizit zu übergeben, die angeforderte URI-Pfad und query, wie du es in PHP über
$_SERVER['REQUEST_URI']
. So das sollte genügen:L
flag bewirkt, dass eine interne Weiterleitung.Ich schaute ein wenig herum, und habe nicht gefunden eine gute Erklärung, warum
%{REQUEST_URI}
verhält wie in deinem Beispiel. Der häufigste Weg, um zu erreichen, was Sie nach zu sein scheint Rückverweise:Bearbeiten
Basierend auf Ihren Kommentar, es scheint, wie
REQUEST_URI
undREQUEST_FILENAME
sind aktualisiert und neu bewertet, wenn die rewriterule ausgelöst wird.%{REQUEST_URI}
scheint sich geändert zu werden.