2017-01-08 8 views
1

Ich möchte ein System erstellen, das eine vom Benutzer bereitgestellte URL liest und diese dann in ein Array schneidet, so dass verschiedene Seiten aus dem Ergebnis ausgegeben werden können.URL in PHP/HTACCESS lesen

Lassen Sie mich ein Beispiel Pseudo-Code erstellen für diese

//Url in borwser is http://example.com/user/frank 
//this is index.php file in examplepage.com 
//folders user and user/frank do not exist 

$url = read_url(); 
//$url[0] = 'example.com'; 
//$url[1] = 'user'; 
//$url[2] = 'frank'; 

if($url[1]=='user' && $url[2]=='frank'){ 
    include_frank_page(): 
}else if($url[1]=='user' && $url[2]=='john'){ 
    include_john_page(): 
}else{ 
    include_user_error_page(): 
} 

Wie kann ich so etwas tun? Ich weiß, WordPress macht so etwas, aber ich kann keinen Teil des Codes finden, der das tut. Hat das etwas mit .htacces Datei zu tun, die es erstellt?

Wenn Sie mir einen Link zu einer Beschreibung oder Tutorial liefern, werde ich sehr dankbar.

EDIT: Ok, FallbackResource /index.php ist genau das, was ich brauche, aber es gibt einen 502 Proxy-Fehler.

Ich habe .htacces die wie folgt aussieht:

FallbackResource /test/index.php 

Und index.php in test

echo $_SERVER['REQUEST_URI']; 

Beide von denen sind in 'Test' Ordner in meinem example.com Stammverzeichnis. Ich möchte dies nur aus offensichtlichen Gründen in diesem Ordner tun.

Wenn ich tippe example.com/test/aaa Ergebnis '/ test/aaa' ist - ok.

Wenn ich tippe example.com/test/aaa/bbb Ergebnis '/ test/aaa/bbb' ist - ok.

Wenn ich tippe example.com/test/ es "502 Proxy-Fehler". Wie kann ich das vermeiden?

EDIT 2: Auch wenn ich Ordner erstellt test2 in meinem test Ordner und example.com/test/test2 getippt - es gab auch 502 Proxy-Fehler.

+0

Welche Bit sind Sie speziell angesteckt? Sie scheinen eine praktikable Idee zu haben? – MrWhite

+0

Eigentlich habe ich noch nichts gemacht. Ich weiß nicht, wo ich anfangen soll, wie ich diese Funktionen aktivieren kann. Ich weiß nicht einmal, wie man das googelt! Deshalb kam ich hierher – MateuszC

+0

Nur um zu verdeutlichen, beziehen Sie sich wiederholt auf '.htacces' - es sollte' sein.htaccess' (2's') – MrWhite

Antwort

1

Sie könnten einen "Front Controller" in .htaccess implementieren, der alle Anfragen an eine einzige Datei weiterleitet, z. index.php. (Das macht WordPress).

Dann in index.php untersuchen Sie die URL und laden Sie den entsprechenden Inhalt.

Zum Beispiel in .htaccess:

FallbackResource /index.php 

Diese Routen werden alle Anforderungen für nicht vorhandene Dateien durch index.php im Document-Root. (Wordpress verwendet eine mod_rewrite Implementierung.)

, dann in index.php Sie können wie etwas tun:

// Actual HTML pages stored in a (hidden) subdirectory called "/pages" 
$pageDir = $_SERVER['DOCUMENT_ROOT'].'/pages'; 
$pages = array (
    '/home' => 'home.php', 
    '/about' => 'about.php', 
    '/contact => 'contact.php', 
); 

// $_SERVER['REQUEST_URI'] contains the URL of the request 
$url = $_SERVER['REQUEST_URI']; 
if (isset($pages[$url])) { 
    include($pageDir.'/'.$pages[$url]); 
} else { 
    // NB: The "error-404.php" page will need to return the appropriate HTTP status 
    include($pageDir.'/error-404.php'); 
} 
+0

Danke. Genau das wollte ich. Obwohl ich 502 Proxy Error habe - ich habe Details zu meinem Hauptpost hinzugefügt. Wenn du könntest, könnte ich dankbar sein. – MateuszC

+0

Wenn Sie bei diesen spezifischen Anforderungen einen "502 Proxy Error" erhalten, liegt wahrscheinlich ein Konflikt mit anderen Richtlinien vor. Sie verwenden ein '/ test'-Unterverzeichnis. Haben Sie eine '.htaccess' Datei im Parent/Root Verzeichnis? Oder Anweisungen in der Serverkonfiguration/VirtualHost? '.htaccess' Dateien werden über den Dateisystempfad vererbt. Als schnellen Test können Sie "RewriteEngine On" am Anfang Ihrer Datei "/ test/.htaccess" hinzufügen. Dies verhindert, dass alle mod_rewrite-Anweisungen im übergeordneten '.htaccess' (standardmäßig) verarbeitet werden. – MrWhite

+0

Nein, ich habe keine .htacces im übergeordneten Verzeichnis, und wenn ich 'RewriteEngine On' verwendet habe, hat es nicht geholfen. – MateuszC