Ich habe eine WordPress- Installation in einen neuen Ordner auf einem Windows / IIS- Server verschoben . Ich richte 301 Weiterleitungen in PHP ein, aber es scheint nicht zu funktionieren. Meine Post-URLs haben das folgende Format:
http:://www.example.com/OLD_FOLDER/index.php/post-title/
Ich kann nicht herausfinden, wie ich den /post-title/
Teil der URL abrufen kann.
$_SERVER["REQUEST_URI"]
- was jeder zu empfehlen scheint - gibt eine leere Zeichenfolge zurück. $_SERVER["PHP_SELF"]
kommt gerade zurück index.php
. Warum ist das so und wie kann ich es beheben?
Antworten:
Vielleicht, weil Sie unter IIS sind,
ist das, was Sie wollen, basierend auf den URLs, die Sie zur Erklärung verwendet haben.
Für Apache würden Sie verwenden
$_SERVER['REQUEST_URI']
.quelle
Notice: Undefined index: PATH_INFO in /home/tdpk/public_html/system/config.php on line 14
quelle
Für Apache:
Sie können auch
HTTP_HOST
anstelle vonSERVER_NAME
wie Herman kommentiert verwenden. In dieser verwandten Frage finden Sie eine vollständige Diskussion. Kurz gesagt, Sie sind wahrscheinlich damit einverstanden, beides zu verwenden. Hier ist die 'Host'-Version:Für die Paranoiden / Warum es wichtig ist
Normalerweise setze ich
ServerName
in,VirtualHost
weil ich möchte, dass dies die kanonische Form der Website ist. Das$_SERVER['HTTP_HOST']
wird basierend auf den Anforderungsheadern festgelegt. Wenn der Server auf einen oder alle Domainnamen unter dieser IP-Adresse antwortet, könnte ein Benutzer den Header fälschen, oder schlimmer noch, jemand könnte einen DNS-Eintrag auf Ihre IP-Adresse verweisen, und dann würde Ihr Server / Ihre Website eine Website mit Dynamik bereitstellen Links, die auf einer falschen URL basieren. Wenn Sie die letztere Methode verwenden, sollten Sie auch Ihre konfigurierenvhost
oder eine.htaccess
Regel einrichten , um die Domain zu erzwingen, die Sie bereitstellen möchten.Hoffentlich hilft das. Der eigentliche Sinn dieser Antwort bestand darin, die erste Codezeile für diejenigen Personen bereitzustellen, die hier gelandet sind, als sie nach einer Möglichkeit gesucht haben, die vollständige URL mit Apache zu erhalten :)
quelle
$_SERVER['HTTP_HOST']
anstelle von verwenden$_SERVER['SERVER_NAME']
. Wenn ein virtueller Host eingerichtet ist, zeigt SERVER_NAME diesen Namen an. Es kann so etwas wie*.example.com
das sein, was nicht gültig ist.$_SERVER['REQUEST_URI']
funktioniert nicht mit IIS, aber ich habe Folgendes gefunden: http://neosmart.net/blog/2006/100-apache-compliant-request_uri-for-iis-and-windows/ das klingt vielversprechend.quelle
Verwenden Sie diese Klasse, damit die URL funktioniert.
quelle
Hinzufügen:
Dann rufen Sie einfach die
my_url
Funktion auf.quelle
Ich benutze die folgende Funktion, um die aktuelle, vollständige URL zu erhalten. Dies sollte unter IIS und Apache funktionieren.
quelle
$query = isset($_SERVER['argv']) ? substr($_SERVER['argv'][0], strpos($_SERVER['argv'][0], ';') + 1) : '';
. Ich habe Ihre Antwort aktualisiert, um dies aufzunehmen.REQUEST_URI wird von Apache festgelegt, sodass Sie es mit IIS nicht erhalten. Versuchen Sie, einen var_dump oder print_r für $ _SERVER auszuführen, und sehen Sie, welche Werte dort vorhanden sind, die Sie verwenden können.
quelle
Der Posttitle-Teil der URL befindet sich hinter Ihrer
index.php
Datei. Dies ist eine übliche Methode, um benutzerfreundliche URLs ohne Verwendung von mod_rewrite bereitzustellen. Der Posttitel ist daher tatsächlich Teil der Abfragezeichenfolge, daher sollten Sie ihn mit $ _SERVER ['QUERY_STRING'] abrufen können.quelle
Verwenden Sie die folgende Zeile oben auf der PHP-Seite, auf der Sie sie verwenden
$_SERVER['REQUEST_URI']
. Dadurch wird Ihr Problem behoben.quelle
Oh, der Spaß eines Schnipsels!
Es hat schöne Renditen wie:
quelle
Jeder hat http_build_url vergessen ?
Wenn keine Parameter übergeben werden,
http_build_url
wird automatisch die aktuelle URL angenommen. Ich würde erwartenREQUEST_URI
, auch aufgenommen zu werden, obwohl es erforderlich zu sein scheint, um die GET-Parameter aufzunehmen.Das obige Beispiel gibt die vollständige URL zurück.
quelle
Ich habe den folgenden Code verwendet und erhalte das richtige Ergebnis ...
quelle
Auf meinem Apache-Server gibt mir dies die vollständige URL in genau dem Format, das Sie suchen:
quelle
Reverse Proxy Support!
Etwas etwas robusteres. Hinweis Es funktioniert nur bei
5.3
oder höher.quelle