Come stampare attuale percorso dell’URL?

Voglio stampare l’URL corrente di percorso, ma il mio codice non funziona propperly.

Io uso questo nella mia file.php

echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];

Quando ho aperto l’url http://sub.mydomain.com/file.php e sembra funzionare bene, e stampa "http://sub.mydomain.com/file.php"

Ma se io rimuovere il .estensione di php, quindi l’url sarà http://sub.mydomain.com/file, invece, stampe "http://sub.mydomain.com/sub/file.php" che è sbagliato.

Stampa il sottodominio due volte, e non so perché?

Nel mio .il file htaccess, ho una riscrittura che rende possibile la rimuove .estensioni di php.

Chi può/vuole aiutarmi per favore? 🙂

InformationsquelleAutor TheYaXxE | 2013-02-16



2 Replies
  1. 67

    È necessario $_SERVER['REQUEST_URI'] invece di $_SERVER['SCRIPT_NAME'], cos $_SERVER['SCRIPT_NAME'] vi darà sempre il file che sta lavorando al momento.

    Da manuale:

    SCRIPT_NAME: Contiene lo script attuale percorso. Questo è utile per le pagine che hanno bisogno di fare riferimento a se stessi. Il __FILE__ costante contiene il percorso completo e il nome del file corrente (cioè) file. .

    Suppongo che questo ti aiuta a raggiungere URL corrente completamente.

    echo 'http://'. $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];

    Avviso: NON FARE AFFIDAMENTO SU CLIENT HTTP_HOST, UTILIZZARE SERVER_NAME, INVECE! VEDERE: Qual è la differenza tra HTTP_HOST e SERVER_NAME in PHP?

    Avviso Di Protezione

    È necessario filtro (disinfettare) $_SERVER['REQUEST_URI'] se lo si utilizza in un punto qualsiasi (per stampare o memorizzare nel database), cos non è sicuro.

    //ie: this could be harmfull
    /user?id=123%00%27<script...

    Quindi, sempre filtrare gli input dell’utente prima di utilizzarli. Almeno usare htmlspecialchars, htmlentities, strip_tags ecc..

    O qualcosa di simile;

    function get_current_url($strip = true) {
        //static sanitizer, 'cos function could be called many times
        static $filter; if ($filter == null) {
            $filter = function($input) use($strip) {
                $input = trim($input);
                if ($input == '/') {
                    return $input;
                }
    
                //add more chars if needed
                $input = str_ireplace(["\0", '%00', "\x0a", '%0a', "\x1a", '%1a'], '',
                    rawurldecode($input));
    
                //remove markup stuff
                if ($strip) {
                    $input = strip_tags($input);
                }
    
                //or any encoding you use instead of utf-8
                $input = htmlspecialchars($input, ENT_QUOTES, 'utf-8');
    
                return $input;
            };
    
            $scheme = isset($_SERVER['REQUEST_SCHEME']) ? $_SERVER['REQUEST_SCHEME']
                : ('http'. (($_SERVER['SERVER_PORT'] == '443') ? 's' : ''));
            $host = $_SERVER['SERVER_NAME'];
            $port = ($_SERVER['SERVER_PORT'] != '80' && $scheme != 'https')
                ? (':'. $_SERVER['SERVER_PORT']) : '';
            }
        }
    
        return sprintf('%s://%s%s%s', $scheme, $host, $port, $filter($_SERVER['REQUEST_URI']));
    }
    • Basandosi su HTTP_HOST è molto utile se il tuo vero che serve host è dietro un proxy o l’utilizzo di nessuno standard porte
  2. 0
    $main_folder = str_replace('\\','/',dirname(__FILE__) );
    $document_root = str_replace('\\','/',$_SERVER['DOCUMENT_ROOT'] );
    $main_folder = str_replace( $document_root, '', $main_folder);
    if( $main_folder ) {
        $current_url = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['SERVER_NAME']. '/' . ltrim( $main_folder, '/' ) . '/';
    } else {
        $current_url = $_SERVER['REQUEST_SCHEME'].'://'.rtrim( $_SERVER['SERVER_NAME'], '/'). '/';
    }
    • descrivi la tua risposta
    • Come stampare attuale percorso dell’URL? $current_url -> attuale percorso URL
    • Non riesce l’ultima MAMP su mac os Sierra. stackoverflow.com/questions/18008135/…
    • $scheme = isset($_SERVER[‘REQUEST_SCHEME’]) ? $_SERVER[‘REQUEST_SCHEME’] : ‘http’; if( $main_folder ) { $current_url = $schema.’://’.$_SERVER[‘SERVER_NAME’]. ‘/’ . ltrim( $main_folder, ‘/’ ) . ‘/’; } else { $current_url = $schema.’://’.rtrim( $_SERVER[‘SERVER_NAME’], ‘/’). ‘/’; }

Lascia un commento