.htaccess-Problem php $_SERVER['PATH_INFO'] ist leer

.htaccess-Problem php $_SERVER['PATH_INFO'] ist leer

.htaccessAuf dem lokalen Host habe ich meine PHP-Anwendung (MVC) mit folgenden Regeln in meiner 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]

Eg localhost/myapp/register/loginwird die Anmeldeseite laden. Aber auf einem Live-Server habe ich Probleme. Das erste Problem, mit dem ich konfrontiert war, war No input file specified. Lesendiese AntwortIch habe diese Zeile geändert RewriteRule ^(.+)$ index.php/$1 [L]in RewriteRule ^(.*)$ index.php?/$1 [L]. Dadurch wurde das erste Problem gelöst, aber ein weiteres Problem geschaffen. Jetzt werden immer dieselbe/Standardansicht und derselbe/Standard-Controller geladen, unabhängig von der URL.

Meine index.php hat folgende Codezeilen:

$url = isset($_SERVER['PATH_INFO']) ? explode('/', ltrim($_SERVER['PATH_INFO'], '/')) : [];
 // Route the request
 Router::route($url);

Ich habe also den Wert $_SERVER['PATH_INFO'] überprüft und er ist leer. Meine Frage ist nun, warum er leer ist und wie ich das normale Verhalten der URLs erreichen kann.

Antwort1

Endlich habe ich es hinbekommen. Mein neues RewriteRuleist RewriteRule ^(.*)$ index.php?/$1 [L,QSA]. Ich verwende in meinem $_SERVER['REQUEST_URI']anstelle von .$_SERVER['PATH_INFO']index.php

Wenn Sie in Ihrem PHP-Code verwenden $_SERVER['REQUEST_URI'], sollten Sie wahrscheinlich keinen Abfragestring (der den URL-Pfad enthält) an dieRewriteRule Auswechslung(zumindest nichtbrauchenzu), 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. Dieses enthält auch eine mögliche Abfragezeichenfolge (die Sie streng genommen wahrscheinlich in Ihrem PHP-Code aufteilen sollten). (Im Gegensatz zur gleichnamigen Apache-Servervariable, die nur den URL-Pfad enthält.)


Wenn Sie stattdessen eine Abfragezeichenfolge übergeben, wie in Ihrem „changed“ RewriteRule, müssen Sie den Schrägstrich-Präfix anscheinend nicht hinzufügen (da Sie diesen in Ihrem PHP-Code entfernen). Beispiel:

RewriteRule (.*) index.php?$1 [QSA,L]

Dann index.phphätten Sie:

$url = !empty($_SERVER['QUERY_STRING']) ? explode('/',$_SERVER['QUERY_STRING']) : [];

Beachten Sie, $_SERVER['QUERY_STRING']dassstetsgesetzt, daher muss nach gesucht werden !empty(), anstatt nach isset().

verwandte Informationen