Frank456564: Modrewrite umschreiberegeln

Hallo zusammen,
ich würde gerne eine Mod_Rewrite Umschreiberegelung verfeinern bekomme es aber leider nicht selbst hin.

Was ich möchte ist das alle Daten aus einem Unterverzeichnis (und dessen Unterverzeichnisse) über den Aufruf des Root Verezeichnises geladen werden.

Die Daten sind also hier: "http://www.domain.de/test"
und sollen aufgerufen werden unter "http://www.domain.de/" wobei gleichzeitig der Name des Unterverzeichnisses nicht gezeigt werden soll.
Es funktioniert auch bereits mit:

  
RewriteEngine on  
RewriteBase /  
  
#Auf Unterverzeichnis umleiten und Verzeichnis ausblenden  
RewriteRule !^test/ test%{REQUEST_URI} [L]  
  
RewriteCond %(HTTP_HOST) ^test/  
  

Allerdings wird beim Aufruf von "www.domain.de/index.html"
als auch "www.domain.de/test/index.html" eben kein Verzeichnis (richtig) und das Unterverzeichnis (falsch) angezeigt. Was ich möchte ist, dass das Unterverzeichnis nie angezeigt werden soll. Also das auch beim Aufruf von "www.domain.de/test/index.html" direkt auf "www.domain.de/index.html" weitergeleitet werden soll (das gleiche natürlich für alle anderen Dateien und Unterverzeichnisse des test Ordners).

Wie mache ich das?
Vielen Dank!!!

  1. @@Frank456564:

    nuqneH

    Die Daten sind also hier: "http://www.domain.de/test"

    Nö, da ist ein 404er. Du möchtest auch nicht eine existierende Domain als Beispieldomain verwenden, sondern eine nach [BCP32] dafür vorgesehene.

    #Auf Unterverzeichnis umleiten und Verzeichnis ausblenden
    RewriteRule !^test/ test%{REQUEST_URI} [L]

    Du möchtest für einfache Weiterleitungen auch nicht RewriteRule verwenden, sondern [link:http://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect@title=Redirect].

    Aber in deinem Fall möchtest du vielleicht das Webrootverzeichnis setzen: [link:http://httpd.apache.org/docs/current/mod/core.html#documentroot@title=DocumentRoot] (ggfs. per Config-Oberfläche deines Hosters).

    Qapla'

    --
    „Perfektion ist nicht dann erreicht, wenn es nichts mehr hinzuzufügen gibt, sondern wenn man nichts mehr weglassen kann.“ (Antoine de Saint-Exupéry)
    1. Du möchtest für einfache Weiterleitungen auch nicht RewriteRule verwenden, sondern [link:http://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect@title=Redirect].

      Warum? mod_alias hat keinen Vorteil gegenüber mod_rewrite - im Gegenteil, wenn auch nur in einer umleitung irgendwas außerhalb des Pfads beachtet werden muss (udn sei es nur ein Wert im Query-String) musst du schon zweigleisig fahren - da kann man gleich konseqent bei mod_rewrite bleiben.

      1. @@suit:

        nuqneH

        Warum? mod_alias hat keinen Vorteil gegenüber mod_rewrite

        When not to use mod_rewrite

        Qapla'

        --
        „Perfektion ist nicht dann erreicht, wenn es nichts mehr hinzuzufügen gibt, sondern wenn man nichts mehr weglassen kann.“ (Antoine de Saint-Exupéry)
        1. Warum? mod_alias hat keinen Vorteil gegenüber mod_rewrite

          When not to use mod_rewrite

          Da steht nicht warum :)

          "To redirect URLs under /one to http://one.example.com, do the following:
           Redirect /one/ http://one.example.com/"

          Ich würde hier folgendes notieren (je nach Kontext mit führendem Slash oder nicht):
          Rewriterule ^/one/ http://one.example.com/ [R=301,L]

          Ebenfalls impliziert die Einleitung des Artikels, dass er sich an Nutzer richtet, die noch keine "mastery" über mod_rewrite haben :)

    2. Tach!

      #Auf Unterverzeichnis umleiten und Verzeichnis ausblenden
      RewriteRule !^test/ test%{REQUEST_URI} [L]
      Du möchtest für einfache Weiterleitungen auch nicht RewriteRule verwenden, sondern [link:http://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect@title=Redirect].

      Er will ja keine (sichtbare) Weiterleitung, sondern ein internes Weiterreichen an das test-Verzeichnis. Das ist mit Redirect nicht zu erreichen.

      Aber in deinem Fall möchtest du vielleicht das Webrootverzeichnis setzen: [link:http://httpd.apache.org/docs/current/mod/core.html#documentroot@title=DocumentRoot] (ggfs. per Config-Oberfläche deines Hosters).

      Es scheint mir auch so, dass es eigentlich das ist, was er braucht, also einfach ausgedrückt, die Domain auf ein Unterverzeichnis zeigen lassen.

      dedlfix.

    3. Du möchtest für einfache Weiterleitungen auch nicht RewriteRule verwenden, sondern [link:http://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect@title=Redirect].

      Das bringt mir aber nichts, denn dann wird der Verzeichnisname nicht ausgeblendet.

      Aber in deinem Fall möchtest du vielleicht das Webrootverzeichnis setzen: [link:http://httpd.apache.org/docs/current/mod/core.html#documentroot@title=DocumentRoot] (ggfs. per Config-Oberfläche deines Hosters).

      Das lässt mein Hoster nicht zu, zudem gibt es noch eine andere Problematik weswegen ich es mit modrewrite lösen wollte.

      1. Tach!

        Aber in deinem Fall möchtest du vielleicht das Webrootverzeichnis setzen: [link:http://httpd.apache.org/docs/current/mod/core.html#documentroot@title=DocumentRoot] (ggfs. per Config-Oberfläche deines Hosters).
        Das lässt mein Hoster nicht zu, zudem gibt es noch eine andere Problematik weswegen ich es mit modrewrite lösen wollte.

        Welche Vorteile hat denn dann dieser Hoster gegenüber den vielen anderen, bei denen man mehrere Domains haben kann und diese ganz selbstverständlich und gleich direkt auf unterschiedliche Unterverzeichnisse zeigen lassen kann?

        Und was ist das für eine andere Problematik? Vielleicht gibt es dafür auch eine bessere Lösung.

        dedlfix.

        1. Hallo,

          Welche Vorteile hat denn dann dieser Hoster gegenüber den vielen anderen, bei denen man mehrere Domains haben kann und diese ganz selbstverständlich und gleich direkt auf unterschiedliche Unterverzeichnisse zeigen lassen kann?

          Ich weiß nicht welche Vorteile der Hoster gegenüber anderen Hostern hat, aber ich bin nun mal jetzt bei dem Hoster.
          Ich kann auch über Confixx auf ein Unterverzeichnis zeigen lassen, aber dann handelt es sich aus irgendeinen Grund um eine 302 Weiterleitung was SEO technisch schlecht ist.

          Und was ist das für eine andere Problematik? Vielleicht gibt es dafür auch eine bessere Lösung.

          Die andere Problematik ist, dass es auf dem Webspace noch ein anderes Verzeichnis gibt in dem sich ein anderes CMS befindet, aus dem einige einzelne Dateien auch aus dem Root Verzeichnis verfügbar sein sollen.

          Am Ende sollen also quasi ein Shop System und ein CMS, jeweils aus dem Root Verzeichnis verfügbar sein.

          1. Tach!

            Ich weiß nicht welche Vorteile der Hoster gegenüber anderen Hostern hat, aber ich bin nun mal jetzt bei dem Hoster.

            Wenn du da solch einen gravierenden Nachteil hast und keine weiteren Vorteile kennst, wüsste ich nicht, was dich da noch hält (außer dem Scheuen des Umzugsaufwands).

            Ich kann auch über Confixx auf ein Unterverzeichnis zeigen lassen, aber dann handelt es sich aus irgendeinen Grund um eine 302 Weiterleitung was SEO technisch schlecht ist.

            Das kann ich nicht so recht glauben. Allerdings kenne ich Confixx nicht. Nachdem was ich in den online verfügbaren Handbüchern gesehen habe, geht nicht direkt hervor, wie die Verbindung zwischen Domain und Verzeichnis hergestellt wird. Ein 302er Redirect wäre aber die sinnloseste Variante. Bist du sicher, dass als Ziel lediglich /verzeichnis und nicht http://example.com/verzeichnis angegeben ist? Nur bei http... ergibt der Redirect einen Sinn. Ansonsten wäre das Konzept, mehrere Domains zu verwalten, reichlich fehlkonstruiert. Das traue ich Confixx nicht zu.

            Am Ende sollen also quasi ein Shop System und ein CMS, jeweils aus dem Root Verzeichnis verfügbar sein.

            Das heißt also, dass du im Root-Verzeichnis etwas liegen hast, auf das du zugreifen möchtest. Weiterhin hast du zwei Unterverzeichnisse, in denen CMS und Shop liegen. Und die beiden (oder vielleicht auch nur eins davon - egal) sollen so tun, als ob sie im Root liegen. Dann nützt die das Verschieben des DocumentRoot auf ein Unterverzeichnis zugegeben recht wenig. Man könnte da schon noch was mit Alias oder Symlinks hinzaubern, was aber je Datei konfiguriert werden müsste, also vermutlich zu aufwendig wird.

            Dann wird es wohl doch die mod_rewrite-Lösung werden müssen. Zunächst mal sei erwähnt, dass ein RewriteCond (oder auch mehrere) nur auf die _danach_ notierte RewriteRule wirkt.

            RewriteEngine on
            RewriteBase /

            #Auf Unterverzeichnis umleiten und Verzeichnis ausblenden
            RewriteRule !^test/ test%{REQUEST_URI} [L]

            RewriteCond %(HTTP_HOST) ^test/

            In deinem Ausgangsposting steht die RewriteCond ziemlich unmotiviert in der Gegend rum. Wenn du also anhand des Hosts eine Einschränkung benötigst, dann muss einerseits die RC nach oben vor die RR und andererseits ist das / am Ende nicht zielführend. Ein Hostnamen enthält keine Slashes. Außerdem müssen die {}-Klammern verwendet werden, keine runden.

            Könnte man dein Ziel auch wie folgt formulieren? Alles was kein(e) real existierende(s) Verzeichnis oder Datei ist soll auf /test umgeschrieben werden. Dann kann man das wie folgt lösen.

            RewriteEngine On  
            RewriteCond %{REQUEST_FILENAME} !-f  
            RewriteCond %{REQUEST_FILENAME} !-d  
            RewriteRule .* test/$0
            

            dedlfix.

            1. Hi,

              In deinem Ausgangsposting steht die RewriteCond ziemlich unmotiviert in der Gegend rum. Wenn du also anhand des Hosts eine Einschränkung benötigst, dann muss einerseits die RC nach oben vor die RR und andererseits ist das / am Ende nicht zielführend. Ein Hostnamen enthält keine Slashes. Außerdem müssen die {}-Klammern verwendet werden, keine runden.

              Ja danke dir! die lose RC war noch von einem anderen erfolglosen Versuch übrig geblieben.

              Könnte man dein Ziel auch wie folgt formulieren? Alles was kein(e) real existierende(s) Verzeichnis oder Datei ist soll auf /test umgeschrieben werden. Dann kann man das wie folgt lösen.

              RewriteEngine On

              RewriteCond %{REQUEST_FILENAME} !-f
              RewriteCond %{REQUEST_FILENAME} !-d
              RewriteRule .* test/$0

                
              Ja danke dir! Das funktioniert wunderbar.