137 votes

Comment puis-je obtenir la page en cours ' s URL complète sur un serveur Windows/IIS ?

J'ai déménagé à WordPress installation d'un nouveau dossier sur un ordinateur Windows/IIS server. Je suis la mise en place des redirections 301 en PHP, mais il ne semble pas fonctionner. Mon post Url au format suivant:

http:://www.example.com/OLD_FOLDER/index.php/post-title/

Je ne peux pas comprendre comment attraper l' /post-title/ de la partie de l'URL.

$_SERVER["REQUEST_URI"] - dont tout le monde semble recommander - retourne une chaîne vide. $_SERVER["PHP_SELF"] est tout simplement rentrer index.php. Pourquoi est-ce, et comment puis-je résoudre ce problème?

135voto

Vinko Vrsalovic Points 116138

Peut-être, parce que vous êtes sous IIS,

est ce que vous voulez, basé sur l’URL que vous avez utilisé pour expliquer.

Pour Apache, vous utiliseriez `` .

63voto

Tyler Carter Points 30030
$pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if ($_SERVER["SERVER_PORT"] != "80")
{
    $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} 
else 
{
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;

36voto

cwd Points 8723

Pour Apache:

'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']


Vous pouvez également utiliser HTTP_HOST au lieu de SERVER_NAME comme Herman commenté. Voir cette question pour un examen complet. En bref, vous êtes probablement OK avec l'aide non plus. Ici est "l'hôte" de la version:

'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']


Pour les Paranoïaques / Pourquoi c'est important

Généralement, j'ai mis en ServerName dans la VirtualHost parce que je veux qu' à l' canonique formulaire du site. L' $_SERVER['HTTP_HOST'] est basée sur les en-têtes de requête. Si le serveur répond à toutes/tous les noms de domaine à l'adresse IP, l'utilisateur pourrait usurper l'en-tête, ou pire, quelqu'un pourrait point un enregistrement DNS pour que votre adresse IP, puis sur votre serveur / site web serait de servir un site web avec des liens dynamiques construit sur une URL incorrecte. Si vous utilisez la méthode de ce dernier, vous devez également configurer votre vhost ou de configurer un .htaccess règle à respecter le domaine que vous voulez servir, quelque chose comme:

RewriteEngine On
RewriteCond %{HTTP_HOST} !(^stackoverflow.com*)$
RewriteRule (.*) http://stackoverflow.com/$1 [R=301,L]
#sometimes u may need to omit this slash ^ depending on your server

Espérons que cela aide. Le point réel de cette réponse, c'était juste pour donner la première ligne de code pour ces gens qui fini ici lors de la recherche d'un moyen de récupérer l'URL complète avec apache :)

18voto

ConroyP Points 24021

REQUEST_URI est spécifique à Apache valeur, afin de ne pas être dans IIS par défaut. Il y a une solution de contournement décrite ici, qui consiste en suivant les instructions d'installation liés par RoBorg ci-dessus.

Pour référence future, il y a un très utile tableau qui répertorie le serveur-les variables de type mis à votre disposition dans les deux Apache et IIS.

11voto

Greg Points 132247

``ne fonctionne pas sur IIS, mais j’ai trouvé ceci : http://neosmart.net/blog/2006/100-apache-compliant-request_uri-for-iis-and-windows/ qui semble prometteur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X