.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 .htaccessDatei 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/loginwird 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
RewriteRuleist . 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 RewriteRuleDirektive 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.phphä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().