![.htaccess-Problem php $_SERVER['PATH_INFO'] ist leer](https://rvso.com/image/756877/.htaccess-Problem%20php%20%24_SERVER%5B'PATH_INFO'%5D%20ist%20leer%20.png)
.htaccess
Auf 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/login
wird 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
RewriteRule
istRewriteRule ^(.*)$ 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 RewriteRule
Direktive 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.php
hä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()
.