mod_rewrite auswaehlbar?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mod_rewrite auswaehlbar?

    Hi,
    habe mal wieder ein Problem.
    Und zwar will ich dass jetzt so machen, dass man auswaehlen kann, ob man bei meinem cms suchmaschinen freundliche url's aktivieren will.

    Jetzt aber meine erste frage...
    soll ich das mit mod_rewrite machen, oder soll ich das so machen, wie hier bei Drweb:
    http://www.drweb.de/suchmaschinen/su...nen-urls.shtml

    und dann noch, wie soll ich dass immer in den ganzen templates aendern? Also wie soll ich die ganzen links aendern.
    Soll ich einfach alle links als variablen ins template uebergeben, oder soll ich jedesmal wenn das template geladen, das template durchgehen lassen und dann einfach alle links ersetzen lassen?

    Oder soll ich das so machen, dass es im template nur die suchmaschinenfreundlichen links gibt, und dann wenn mod_rewrite aktiviert ist, das halt alles mit mod_rewrite machen lassen, oder wenns deaktiviert ist, es mit dem von drweb durchgehen lassen.

    Naja, wie wuerdet ihr das fuer ein cms machen?

  • #2
    Von Dr. Webs würde ich Abstand nehmen. Das mag funktionieren, aber ist alles andere als sauber. Es verwurstet den Code, da man sich $_GET selbst zusammenstricken muß, die Serverlogs werden auch nicht lesbarer und und und.

    Wenn du schicke URLs haben willst, dann ist mod_rewrite das beste Mittel. Wenn es nicht verfügbar ist, bau es mit einem PHP-Script nach.

    Kommentar


    • #3
      Original geschrieben von onemorenerd
      Von Dr. Webs würde ich Abstand nehmen. Das mag funktionieren, aber ist alles andere als sauber. Es verwurstet den Code, da man sich $_GET selbst zusammenstricken muß, die Serverlogs werden auch nicht lesbarer und und und.

      Wenn du schicke URLs haben willst, dann ist mod_rewrite das beste Mittel. Wenn es nicht verfügbar ist, bau es mit einem PHP-Script nach.
      path_info ist das beste was der Welt passieren konnte ... erzeugt keinen Overhead durch ein unnötiges (großes) Modul (mod_rewrite), dazu ist es wesentlich einfacher zum Debugen und alles in allem bleibt halt alles einfach im php-Code.
      Für schöne URLs würde ich auf jeden Fall path_info statt mod_rewrite benutzen (mod_rewrite ist für mich so ziemlich DAS abartigste...)

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        Um die Funktionalität von mod_rewrite mit PHP nachzubauen genügt path_info bei weitem nicht. Man muß reguläre Ausdrücke anwenden, Header senden ...
        Bindet man das PHP-Rewriting-Script via ErrorDocument ein, gehen POST-Daten verloren ...
        und performanter als mod_rewrite dürfte es mit PHP auch nicht gehen, denn das Modul verzögert die Antwort des Servers so gut wie gar nicht.

        Kommentar


        • #5
          eine dritte Möglichkeit wäre ein CMS, welche alle Dateien als mehr oder wenige statische Seiten ablegt.

          ist sehr performant.

          Das einzig dynamische ist jetzt nur noch die benutzerinteraktion...


          An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

          Kommentar


          • #6
            Original geschrieben von onemorenerd
            Um die Funktionalität von mod_rewrite mit PHP nachzubauen genügt path_info bei weitem nicht. Man muß reguläre Ausdrücke anwenden, Header senden ...

            die Funktion meinte ich nicht ... ich meinte $_SERVER['PATH_INFO'], man macht ein explode('/') drauf und sofort hat man alle Teile, kann dann das Modul auslesen (sofern nötig), die übergebene ID per intval validieren, etc. pp.
            Also die Sachen, die man EH machen muss

            Bindet man das PHP-Rewriting-Script via ErrorDocument ein, gehen POST-Daten verloren ...
            Wieso sollte man das tun?

            und performanter als mod_rewrite dürfte es mit PHP auch nicht gehen, denn das Modul verzögert die Antwort des Servers so gut wie gar nicht.
            Verbraucht aber mehr Resourcen und bei einem viel beschäftigen Server ist das eher ungünstig (bei einem Dual-Core 2Ghz Prozessor mit einem Zugriff am Tag, kriegt man den Unterschied natürlich nicht mit)

            Die Kombination von
            Code:
            ForceType application/x-httpd-php
            mit $_SERVER['PATH_INFO'] ist meiner Meinung nach das beste. Man spart sich das komplette Rewrite-Modul (und den damit zusammen hängenden großen Overhead), die URLs sehen trotzdem schön aus und alles bleibt auf php-Ebene.

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              Original geschrieben von ghostgambler
              Wieso sollte man das tun?
              Wie würdest du denn dafür sorgen, dass jeder Request, den der Webserver empfängt erstmal auf das Script umgeleitet wird, welches die URL-Umschreibung simuliert?
              Verbraucht aber mehr Resourcen
              Was zu beweisen wäre. Es ist zwar nicht von der Hand zu weisen, dass mod_rewrite in seiner häufigsten Verwendungsform - nämlich über die .htaccess - speziell bei vielen oder komplexen Rewrites ziemlich bremst. Aber das liegt nur daran, dass mod_rewrite in diesem Fall interne Subrequests machen muß, die eben ihre Zeit dauern. Stehen die RewriteRules in der (V)Serverkonfig, ist dies nicht nötig und außerdem liegen die Regeln dann jederzeit im RAM. Also ist nur noch deren lineare Anwendung nötig .... und die ist in C implementiert, was mit PHP nicht zu schlagen sein dürfte.

              Kommentar


              • #8
                Original geschrieben von onemorenerd
                Wie würdest du denn dafür sorgen, dass jeder Request, den der Webserver empfängt erstmal auf das Script umgeleitet wird, welches die URL-Umschreibung simuliert?
                gar nicht Oo,

                Ich würde z.B. ein Skript "news" anlegen, welches man dann per
                http://localhost/news/123
                aufrufen kann, auf "news" kommt ein Forcetype und in news wird die ID extrahiert und verwendet.
                Für das Forum dann eben ein Skript "forum"

                Ich würde niemals alles über einen Bootstrapper laufen lassen, ich mag die Technik nicht :/

                Was zu beweisen wäre. Es ist zwar nicht von der Hand zu weisen, dass mod_rewrite in seiner häufigsten Verwendungsform - nämlich über die .htaccess - speziell bei vielen oder komplexen Rewrites ziemlich bremst. Aber das liegt nur daran, dass mod_rewrite in diesem Fall interne Subrequests machen muß, die eben ihre Zeit dauern. Stehen die RewriteRules in der (V)Serverkonfig, ist dies nicht nötig und außerdem liegen die Regeln dann jederzeit im RAM. Also ist nur noch deren lineare Anwendung nötig .... und die ist in C implementiert, was mit PHP nicht zu schlagen sein dürfte.
                Dazu muss man aber erstmal Zugriff auf die Konfig haben!

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Original geschrieben von ghostgambler
                  Ich würde z.B. ein Skript "news" anlegen, welches man dann per
                  http://localhost/news/123
                  aufrufen kann, auf "news" kommt ein Forcetype und in news wird die ID extrahiert und verwendet.
                  Für das Forum dann eben ein Skript "forum"
                  Und für jeden weiteren Pseudo-"Ordner" unterhalb der Domainwurzel dann ein weiteres Script ...?

                  Und was, wenn ich gar keine solchen "Ordner" haben möchte, sondern localhost/blah und localhost/blubb nur jeweils den Wert blah oder blubb an ein Script weiterreichen sollen?


                  path_info als "Ersatz" für mod_rewrite verkaufen zu wollen, ist Nonsense.
                  Es kann ein winzig kleinen Teil von dessen Funktionalität halbwegs passabel abdecken - aber das war's auch schon.
                  mod_rewrite kann noch jede Menge mehr.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Original geschrieben von wahsaga
                    Und für jeden weiteren Pseudo-"Ordner" unterhalb der Domainwurzel dann ein weiteres Script ...?
                    exakt

                    Und was, wenn ich gar keine solchen "Ordner" haben möchte, sondern localhost/blah und localhost/blubb nur jeweils den Wert blah oder blubb an ein Script weiterreichen sollen?
                    dann muss man mod_rewrite nehmen, aber ich kann mir keinen sinnvollen Verwendungszweck denken, wo nicht als erstes der "Modulname" stehen müsste, den man dann auch direkt als Skript in den entsprechenden Ordner stecken kann

                    path_info als "Ersatz" für mod_rewrite verkaufen zu wollen, ist Nonsense.
                    Es kann ein winzig kleinen Teil von dessen Funktionalität halbwegs passabel abdecken - aber das war's auch schon.
                    mod_rewrite kann noch jede Menge mehr.
                    jede Menge mehr, aber kaum was braucht man.
                    Für die Standard-URL-"Umwandlung"
                    localhost/news?id=123
                    -> localhost/news/123
                    reicht path_info bei weitem und spart Resourcen, sollte mehr nötig sein, sollte man sich überlegen, ob man seine Struktur nicht falsch angelegt hat...

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #11
                      Original geschrieben von ghostgambler
                      dann muss man mod_rewrite nehmen, aber ich kann mir keinen sinnvollen Verwendungszweck denken, wo nicht als erstes der "Modulname" stehen müsste
                      Dann fehlt's dir vielleicht an Phantasie diesbezüglich.
                      jede Menge mehr, aber kaum was braucht man.
                      Du vielleicht nicht :-)
                      Für die Standard-URL-"Umwandlung"
                      localhost/news?id=123
                      -> localhost/news/123
                      reicht path_info bei weitem und spart Resourcen, sollte mehr nötig sein, sollte man sich überlegen, ob man seine Struktur nicht falsch angelegt hat...
                      Wenn ich, wie von dir beschrieben, für jeden Pseudo-"Ordner" eine eigene Datei (oder mindestens einen SymLink) anlegen müsste - ja, dann würde ich mich wirklich fragen, was ich - strukturell oder konzeptionell - falsch gemacht habe ...
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Original geschrieben von wahsaga
                        Dann fehlt's dir vielleicht an Phantasie diesbezüglich.
                        oder ich denke einfach zu rationell *shrug*

                        Wenn ich, wie von dir beschrieben, für jeden Pseudo-"Ordner" eine eigene Datei (oder mindestens einen SymLink) anlegen müsste - ja, dann würde ich mich wirklich fragen, was ich - strukturell oder konzeptionell - falsch gemacht habe ...
                        Jedes Skript hat eine eigene Funktionsweise, Klassen, Funktionen, etc., das muss eh irgendwo untergebracht werden. Und wo macht sich das besser als in dem jeweiligen Skript?
                        Nirgends...

                        Wenn ich ein Gästebuch programmiere, dann will ich den gesamten Code, der dafür nötig ist auch im Gästebuch-Skript haben, die schöne URL ist doch nur der Fliegenshit nach außen.
                        Und für diese Art von Programmierung eignet sich path_info wesentlich besser.
                        Wenn du/ihr die Bootstrapper-Technik bevorzugt, dann mag auch mod_rewrite besser(/unumgänglich) sein, aber ich werde diese Technik niemals verwenden.
                        Für mich sind Skripte einzelne Programme, die auf einem gemeinsamen Layer aufsetzen, und exakt diese Vorstellung setze ich mit einzelnen Dateien plus einem globalen require/include um. Die Bootstrapper-Methode verfolgt ein ganz anderes Ideal, nämlich EINE Anwendung.
                        Wie ich schon sagte, ist die Schönheit der URLs nur das i-Tüpfelchen für den User, dabei verbraucht path_info weniger Resourcen und reicht für meine Denkweise vollkommen aus. Bei deiner/eurer Denkweise, laut eigener Aussagen, offensichtlich nicht und da hat man dann gleich wieder ein Manko: Ich kann mit path_info auskommen, ihr eher nicht ... tjo, Pech :P

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar


                        • #13
                          @Creativ: Bastel dir doch eine Funktion, mit der du die URLs erstellst. Vorher setzt du eine Konstante MOD_REWRITE o.ä. und je nachdem wie der Wert gesetzt ist wird eine "normale" URL ausgegeben oder eine, die mod_rewrite braucht.

                          Das könnte so aussehen (eine Funktion aus einer Klasse, die bei mir die ganze Seite erstellt)

                          PHP-Code:
                              /*
                              erstellt eine URL, die je nachdem wie MOD_REWRITE gesetzt ist
                              unterschiedlich ausgegeben wird.
                              $module ist das Modul, auf das verwiesen werden soll
                              $id ist die ID, die uebergeben werden soll
                              $additional sind weitere GET-Parameter, die einfach angehaengt werden
                              */    
                              
                          protected function CreateURL($module,$action '',$id '',$additional '') {
                                  
                          $url WEBROOT/* z.B. http://www.localhost/wasauchimmer */

                                  
                          if(MOD_REWRITE) {        
                                      if(
                          $module == 'SELF') { $url .= Module::HANDLE.'/'; } else { $url .= $module.'/'; }
                                      if(!empty(
                          $action)) { $url .= $action.'/'; } 
                                      if(!empty(
                          $id)) { $url .= $id.'/'; }
                                  }
                                  else {
                                      if(
                          $module == 'SELF') { $url .= '?mod='.Module::HANDLE; } else { $url += '?mod='.$module; }
                                      if(!empty(
                          $action)) { $url .= '&action='.$action; } 
                                      if(!empty(
                          $id)) { $url .= '&id='.$id; }
                                  }
                                  if(!empty(
                          $additional)) { $url .= $additional; }        
                                  return 
                          $url;
                              } 
                          Die Rewrite_Rule:
                          RewriteRule ^([a-z]*)/?([a-z]*)/?([0-9]*)/?$ \
                          /deinprojekt/index.php?mod=$1&action=$2&id=$3&$4
                          got gentoo?

                          Kommentar


                          • #14
                            Original geschrieben von ghostgambler
                            Jedes Skript hat eine eigene Funktionsweise, Klassen, Funktionen, etc., das muss eh irgendwo untergebracht werden. Und wo macht sich das besser als in dem jeweiligen Skript?
                            Na und?
                            Wenn ich möchte, kann ich doch auch mit mod_rewrite unterschiedliche Anfragen an unterschiedliche Scripte weiterleiten.

                            Die Bootstrapper-Methode verfolgt ein ganz anderes Ideal, nämlich EINE Anwendung.
                            Ich habe keine Ahnung, was du mir mit diesem Wort eigentlich sagen willst - kurzes googlen lässt mich nur vermuten, dass da wieder mal ein Framework-Geschädigter spricht :-)

                            Wie ich schon sagte, ist die Schönheit der URLs nur das i-Tüpfelchen für den User
                            Ein guter URL ist etwas absolut wesentliches im www.
                            Der User interessiert sich für deine Scripte und ihre Strukturierung nicht die Bohne - ihn interessiert, wie er dann die Inhalte rankommt, und das macht er über HTTP, dafür nutzt er URLs.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              Original geschrieben von wahsaga
                              Na und?
                              Wenn ich möchte, kann ich doch auch mit mod_rewrite unterschiedliche Anfragen an unterschiedliche Scripte weiterleiten.
                              Ja, aber wozu mit mod_rewrite, wenn man doch auch gleich das Skript aufrufen kann?

                              Ich habe keine Ahnung, was du mir mit diesem Wort eigentlich sagen willst - kurzes googlen lässt mich nur vermuten, dass da wieder mal ein Framework-Geschädigter spricht :-)
                              halt ein Modewort von Zend, man muss halt mit der Zeit gehen


                              Ein guter URL ist etwas absolut wesentliches im www.
                              Der User interessiert sich für deine Scripte und ihre Strukturierung nicht die Bohne - ihn interessiert, wie er dann die Inhalte rankommt, und das macht er über HTTP, dafür nutzt er URLs.
                              Ja, aber im Endeffekt ist das nur Mittel zum Zweck. Schöne URLs kann man mit jeder Struktur erreichen, aber mit "meiner" Struktur, kann ich auf die Einkompilation des mod_rewrite-Moduls verzichten. Wenn man seine Struktur irgendwie wählt, endet man natürlich bei mod_rewrite.
                              Wie ich schon sagte, wieso soll ich per mod_rewrite einen Aufruf auf ein Skript umlenken, wenn ich auch gleich das Skript hinter den Aufruf packen kann?
                              Ich sehe mit der Verwendung von mod_rewrite nur den Verlust an Performance, keinen Vorteil durch bessere Strukturierung des darunter liegenden Sources (offensichtlich kriege ich es ja auch ohne mod_rewrite "schön" und strukturiert hin (und ich lege viel Wert auf Struktur)) und die "erweiterten Features", die mod_rewrite noch in C zu bieten hat, wo man dann nicht auf PHP ausweichen muss, habe ich noch nie gebraucht :?

                              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                              Wie man Fragen richtig stellt

                              Kommentar

                              Lädt...
                              X