J'ai déplacé une installation WordPress vers un nouveau dossier sur un serveur Windows / IIS . Je mets en place des redirections 301 en PHP, mais cela ne semble pas fonctionner. Les URL de mes publications ont le format suivant:
http:://www.example.com/OLD_FOLDER/index.php/post-title/
Je ne peux pas comprendre comment saisir la /post-title/
partie de l'URL.
$_SERVER["REQUEST_URI"]
- ce que tout le monde semble recommander - renvoie une chaîne vide. $_SERVER["PHP_SELF"]
est juste de retour index.php
. Pourquoi cela et comment puis-je y remédier?
Réponses:
Peut-être, parce que vous êtes sous IIS,
est ce que vous voulez, en fonction des URL que vous avez utilisées pour expliquer.
Pour Apache, vous utiliseriez
$_SERVER['REQUEST_URI']
.la source
Notice: Undefined index: PATH_INFO in /home/tdpk/public_html/system/config.php on line 14
la source
Pour Apache:
Vous pouvez également utiliser
HTTP_HOST
au lieu deSERVER_NAME
comme l'a commenté Herman. Voir cette question connexe pour une discussion complète. En bref, vous êtes probablement d'accord pour utiliser l'un ou l'autre. Voici la version 'hôte':Pour le paranoïaque / Pourquoi c'est important
En règle générale, je mets
ServerName
leVirtualHost
car je veux que ce soit la forme canonique du site Web. Le$_SERVER['HTTP_HOST']
est défini en fonction des en-têtes de demande. Si le serveur répond à l'un / tous les noms de domaine à cette adresse IP, un utilisateur pourrait usurper l'en-tête, ou pire, quelqu'un pourrait pointer un enregistrement DNS vers votre adresse IP, puis votre serveur / site Web servirait un site Web dynamique. liens construits sur une URL incorrecte. Si vous utilisez cette dernière méthode, vous devez également configurer votrevhost
ou mettre en place une.htaccess
règle pour appliquer le domaine que vous souhaitez diffuser, quelque chose comme:J'espère que cela pourra aider. Le vrai point de cette réponse était simplement de fournir la première ligne de code pour les personnes qui se sont retrouvées ici lors de la recherche d'un moyen d'obtenir l'URL complète avec apache :)
la source
$_SERVER['HTTP_HOST']
place de$_SERVER['SERVER_NAME']
. S'il existe une configuration d'hôte virtuel, SERVER_NAME affichera ce nom. Cela peut être quelque chose comme*.example.com
qui n'est pas valide.$_SERVER['REQUEST_URI']
ne fonctionne pas sur IIS, mais j'ai trouvé ceci: http://neosmart.net/blog/2006/100-apache-compliant-request_uri-for-iis-and-windows/ ce qui semble prometteur.la source
Utilisez cette classe pour faire fonctionner l'URL.
la source
Ajouter:
Ensuite, appelez simplement la
my_url
fonction.la source
J'utilise la fonction suivante pour obtenir l'URL complète actuelle. Cela devrait fonctionner sur IIS et Apache.
la source
$query = isset($_SERVER['argv']) ? substr($_SERVER['argv'][0], strpos($_SERVER['argv'][0], ';') + 1) : '';
. J'ai mis à jour votre réponse pour l'inclure.REQUEST_URI est défini par Apache, vous ne l'obtiendrez donc pas avec IIS. Essayez de faire un var_dump ou print_r sur $ _SERVER et voyez quelles valeurs existent là-bas que vous pouvez utiliser.
la source
La partie post-titre de l' URL se trouve après votre
index.php
fichier, ce qui est un moyen courant de fournir des URL conviviales sans utiliser mod_rewrite. Le titre du post fait donc partie de la chaîne de requête, vous devriez donc pouvoir l'obtenir en utilisant $ _SERVER ['QUERY_STRING']la source
Utilisez la ligne suivante en haut de la page PHP sur laquelle vous utilisez
$_SERVER['REQUEST_URI']
. Cela résoudra votre problème.la source
Oh, le plaisir d'un extrait!
Il a de beaux retours comme:
la source
Tout le monde a oublié http_build_url ?
Lorsqu'aucun paramètre n'est passé,
http_build_url
il prendra automatiquement l'URL actuelle. Je m'attendsREQUEST_URI
à être également inclus, bien que cela semble être nécessaire pour inclure les paramètres GET.L'exemple ci-dessus renverra l'URL complète.
la source
J'ai utilisé le code suivant et j'obtiens le bon résultat ...
la source
Dans mon serveur Apache, cela me donne l'URL complète dans le format exact que vous recherchez:
la source
Prise en charge du proxy inverse!
Quelque chose d'un peu plus robuste. Remarque Cela ne fonctionnera que sur
5.3
ou plus.la source