3 Stimmen

URI in URL umwandeln

Wie kann ich einen URI in eine URL umwandeln, wenn ich den aktuellen Website-Pfad kenne?

Betrachten Sie diese Beispiele:

Der aktuelle Pfad lautet: `http://www.site.com/aa/folder/page1.php

Uri: Ordner2/Seite.php

Uri: /ordner2/seite.php


Und was ist, wenn der aktuelle Pfad ist:

http://www.site.com/aa/folder/

oder

http://www.site.com/aa/folder

Wie werden die URLs dann aussehen?

Ich weiß, dass dies einfach und offensichtlich sein sollte, aber ich kann nirgendwo die vollständige Antwort finden (und ja, ich habe bei Google gesucht)

2voto

Andre Punkte 3080

Le site $_SERVER superglobal hat die Informationen, nach denen Sie suchen, nämlich $_SERVER['REQUEST_URI'] y $_SERVER['SERVER_NAME'] . $_SERVER['QUERY_STRING'] könnte ebenfalls nützlich sein.

Bitte sehen Sie:

http://php.net/manual/en/reserved.variables.server.php

2voto

Michael Petrov Punkte 2147

Hier ist ein Codeblock, der die von Ihnen benötigte Funktion enthält: http://ca.php.net/manual/en/function.parse-url.php#76682

Edit: Die oben verlinkte Funktion mit einem Beispiel modifiziert

<?php

var_dump(resolve_url('http://www.site.com/aa/folder/page1.php','folder2/page.php?x=y&z=a'));

var_dump(resolve_url('http://www.site.com/aa/folder/page1.php','/folder2/page2.php'));

function unparse_url($components) {
    return $components['scheme'].'://'.$components['host'].$components['path'];
}

/**
 * Resolve a URL relative to a base path. This happens to work with POSIX
 * filenames as well. This is based on RFC 2396 section 5.2.
 */
function resolve_url($base, $url) {
        if (!strlen($base)) return $url;
        // Step 2
        if (!strlen($url)) return $base;
        // Step 3
        if (preg_match('!^[a-z]+:!i', $url)) return $url;
        $base = parse_url($base);
        if ($url{0} == "#") {
                // Step 2 (fragment)
                $base['fragment'] = substr($url, 1);
                return unparse_url($base);
        }
        unset($base['fragment']);
        unset($base['query']);
        if (substr($url, 0, 2) == "//") {
                // Step 4
                return unparse_url(array(
                        'scheme'=>$base['scheme'],
                        'path'=>$url,
                ));
        } else if ($url{0} == "/") {
                // Step 5
                $base['path'] = $url;
        } else {
                // Step 6
                $path = explode('/', $base['path']);
                $url_path = explode('/', $url);
                // Step 6a: drop file from base
                array_pop($path);
                // Step 6b, 6c, 6e: append url while removing "." and ".." from
                // the directory portion
                $end = array_pop($url_path);
                foreach ($url_path as $segment) {
                        if ($segment == '.') {
                                // skip
                        } else if ($segment == '..' && $path && $path[sizeof($path)-1] != '..') {
                                array_pop($path);
                        } else {
                                $path[] = $segment;
                        }
                }
                // Step 6d, 6f: remove "." and ".." from file portion
                if ($end == '.') {
                        $path[] = '';
                } else if ($end == '..' && $path && $path[sizeof($path)-1] != '..') {
                        $path[sizeof($path)-1] = '';
                } else {
                        $path[] = $end;
                }
                // Step 6h
                $base['path'] = join('/', $path);

        }
        // Step 7
        return unparse_url($base);
}

?>

0voto

dnagirl Punkte 19738

Php hat pathinfo() , realpath() y parseurl() und andere Dateisystem- und Url-Pfad-Funktionen. Wird zusammen mit Informationen aus dem $_SERVER superglobal (wie von Andre erwähnt), sollten Sie in der Lage sein, das zu tun, was Sie brauchen.

0voto

Dejan Marjanović Punkte 18984
$uri = "http://www.site.com/aa/folder/";

$url = explode("/", $uri);
$url = $url[2];

echo $url; //www.site.com

Ist es das, wonach Sie suchen?

0voto

Felix Kling Punkte 751464

Wenn Sie PECL installieren pecl_http können Sie Folgendes verwenden http_build_url :

http_build_url("http://www.site.com/aa/folder/page1.php",
                 array("path" => "folder2/page.php"));

und Sie übergeben einen Ihrer relativen URI(L)s als path . Die Funktion sorgt dafür, dass die richtige gebaut wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X