.htaccess Problem php $ _SERVER ['PATH_INFO'] ist leer [geschlossen]
Auf dem lokalen Host habe ich meine PHP-Anwendung (MVC) mit den folgenden Regeln in meiner .htaccess
Datei ausgeführt:
Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^(config|core|css|js|fonts|images|robots\.txt) RewriteRule ^(.+)$ index.php/$1 [L]
ZB localhost/myapp/register/login
wird die Anmeldeseite geladen. Aber auf einem Live-Server habe ich Probleme. Das erste Problem, mit dem ich konfrontiert war, war No input file specified
. Als ich diese Antwort las, änderte ich diese Zeile RewriteRule ^(.+)$ index.php/$1 [L]
in RewriteRule ^(.*)$ index.php?/$1 [L]
. Dies löste das erste Problem, verursachte jedoch ein weiteres Problem und lädt jetzt immer dieselbe / Standardansicht und denselben Controller, unabhängig von der URL.
Meine index.php enthält die folgenden Codezeilen:
$url = isset($_SERVER['PATH_INFO']) ? explode('/', ltrim($_SERVER['PATH_INFO'], '/')) : [];
// Route the request
Router::route($url);
Also habe ich den Wert von $ _SERVER ['PATH_INFO'] überprüft und er ist leer. Jetzt ist meine Frage, warum es leer ist und wie ich das normale Verhalten der URLs erreichen kann.
Antworten
Endlich habe ich es geschafft. Mein neues
RewriteRule
ist . Ich benutze statt in meinem .RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
$_SERVER['REQUEST_URI']
$_SERVER['PATH_INFO']
index.php
Wenn Sie verwenden $_SERVER['REQUEST_URI']
in Ihrem PHP - Code , dann sollten Sie wahrscheinlich nicht eine Abfrage - Zeichenfolge (mit dem URL-Pfad) werden angehängt an die RewriteRule
Substitution (zumindest nicht wahr müssen zu), dh. Verwenden Sie RewriteRule . index.php [L]
stattdessen einfach .
Das $_SERVER['REQUEST_URI']
PHP-Superglobal enthält unabhängig von Ihrer RewriteRule
Direktive nur den angeforderten URL-Pfad . Dies enthält auch eine mögliche Abfragezeichenfolge (die Sie streng genommen wahrscheinlich in Ihren PHP-Code aufteilen sollten). (Im Gegensatz zur gleichnamigen Apache-Servervariablen, die nur den URL-Pfad enthält.)
Wenn Sie stattdessen eine Abfragezeichenfolge übergeben, wie in Ihrer "geänderten" RewriteRule
, müssen Sie anscheinend kein Schrägstrichpräfix hinzufügen (da Sie diese in Ihrem PHP-Code entfernen). Beispielsweise:
RewriteRule (.*) index.php?$1 [QSA,L]
Dann index.php
hätten Sie in:
$url = !empty($_SERVER['QUERY_STRING']) ? explode('/',$_SERVER['QUERY_STRING']) : [];
Beachten Sie, dass $_SERVER['QUERY_STRING']
ist immer gesetzt, daher die Notwendigkeit zu überprüfen !empty()
, statt isset()
.