2011-01-04 5 views
0

Ich arbeite an meiner ersten Seite, die auf einem PHP/Apache-Stack basiert.URL-Verschönerung mit beliebiger Anzahl von "Unterverzeichnissen"

Meine Seite hat eine logische Menü wie folgt strukturiert:

+AAA Entry 
    -AAB Entry 
    -AABA Subentry 
    -AABB Subentry 
    -AAC Entry 
    -AACA Subentry 
     -AACAA Subentry 
     -AACAB Subentry 
    -AACB Subentry 
    -AAD Entry 

+BBB Entry 
    -BBC Entry 
    -BBCA Subentry 
    etc. 
+CCC Entry 
+DDD Entry 

Mein Ziel ist es gültige URLs wie diese haben:

http://www.mydomain.com/aaa/aab/aaba 
http://www.mydomain.com/aaa/aac/aaca/aacaa 
http://www.mydomain.com/aaa/aac/aacb 
http://www.mydomain.com/aaa/aad 

http://www.mydomain.com/bbb 
http://www.mydomain.com/bbb/bbc 
http://www.mydomain.com/bbb/bbc/bbca 

http://www.mydomain.com/ccc 

Ich habe über mod_rewrite ‚lesen s RewriteRule und RewriteCond, aber ich bin nicht sicher, welche Methode in Bezug auf Wartbarkeit verwendet werden soll. Was passiert, wenn ich zum Beispiel eine weitere Ebene zu AACAA hinzufügen möchte? Muss ich immer wieder mit mod_rewrite herumspielen?

Ist es angemessener, alles auf index.php umzuleiten und REQUEST_URI manuell zu analysieren? Wie wird das von Profis gemacht?

+0

Dies ist "von Profis gemacht" mit einem [PHP-Framework] (http://www.phpframeworks.com/). Sie sollten nicht Ihre eigenen rollen außer als eine Bildungsübung. – meagar

+0

Ja, ich versuche mein eigenes CMS in der Hoffnung zu schreiben, PHP zu lernen und das Web im Allgemeinen zu programmieren. Dies wird niemals in einer Produktionsumgebung sein. :) – ypeels72

Antwort

1

Es ist viel einfacher, alle URLs zu Ihrem Controller Skript zu übermitteln, und tun Sie Ihr Routing in PHP:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* my_script.php [L] 

Das leitet alle Anfragen für Dateien, die durch my_script.php nicht existieren. Von dort aus können Sie den Anforderungs-URI untersuchen, ihn in Segmente aufteilen, die durch Schrägstriche begrenzt sind, und auf die richtige Datei umleiten.

+0

Das ist die einzige Lösung, die ich mir selbst gemacht habe, nachdem ich ein wenig darüber nachgedacht habe. Ich warte noch ein bisschen auf weitere Antworten, bevor ich dies als beantwortet markieren werde. Vielen Dank! – ypeels72

+0

+1. Gibt es einen Grund, warum es für '-d' und' -l' keinen zusätzlichen 'RewriteCond' gibt? –

+0

@gore '-l' ist redundant (' -f' deckt Symlinks ab) und ich möchte nie Verzeichnisinhalte so "-d" liefern. – meagar

Verwandte Themen