Ergebnis 1 bis 12 von 12

Thema: URLs umschreiben

  1. #1
    Contao-Nutzer
    Registriert seit
    14.12.2009.
    Ort
    Offenbach am Main
    Beiträge
    11

    Standard URLs umschreiben

    Wir haben eine Site zunächst ohne die Option "URLs umschreiben" aufgebaut. Die eingerichtete TagCloud (für ein Newsarchiv/Blog) funktionierte bisher auch einwandfrei.

    Wenn ich die Option "URLs umschreiben" nun im Backend ändere, wird beim Klick auf einen Tag (zum Filtern der Artikel, Zielseite ist dieselbe Seite, d.h. die Newsübersicht) vom Server ein 404 ausgegeben. Ist hierfür eine Anpassung der mod_rewrite Einstellungen notwendig?

    Noch etwas klarer formuliert: Der Link index.php/blog/tag/Facebook+Credits.html funktioniert, der Link blog/tag/Facebook+Credits.html funktioniert nicht.

    Contao 2.11.3
    tags 1.7.4 stable

    Besten Dank für eine kurze Hilfe,
    Thorsten

  2. #2
    Contao-Fan Avatar von qba
    Registriert seit
    23.07.2010.
    Ort
    Berlin Mariendorf
    Beiträge
    574

    Standard

    Ich habe mit Tags noch nie gearbeitet. Hast Du schon mal eine Systemwartung durchgeführt? Keine Ahnung, ob da die Verlinkung neu aufgebaut wird.
    Gruß qba|uwe

  3. #3
    Contao-Urgestein
    Registriert seit
    30.01.2011.
    Ort
    Stuttgart
    Beiträge
    4.138

    Standard

    Für die Option "URLs umschreiben" ist eine Anpassung der mod_rewrite Einstellungen notwendig.
    Code:
    ##
      # Change the RewriteBase if your Contao installation is in a subdirectoy and
      # the rewrite rules are not working properly. Usage examples:
      #
      #   RewriteBase /contao-2.11.0

  4. #4
    Contao-Fan Avatar von hschottm
    Registriert seit
    15.06.2009.
    Ort
    Loxstedt, Germany
    Beiträge
    825
    User beschenken
    Wunschliste

    Standard

    Moin Thorsten,

    Zitat Zitat von Thorsten24 Beitrag anzeigen
    Wir haben eine Site zunächst ohne die Option "URLs umschreiben" aufgebaut. Die eingerichtete TagCloud (für ein Newsarchiv/Blog) funktionierte bisher auch einwandfrei.

    Wenn ich die Option "URLs umschreiben" nun im Backend ändere, wird beim Klick auf einen Tag (zum Filtern der Artikel, Zielseite ist dieselbe Seite, d.h. die Newsübersicht) vom Server ein 404 ausgegeben. Ist hierfür eine Anpassung der mod_rewrite Einstellungen notwendig?

    Noch etwas klarer formuliert: Der Link index.php/blog/tag/Facebook+Credits.html funktioniert, der Link blog/tag/Facebook+Credits.html funktioniert nicht.

    Contao 2.11.3
    tags 1.7.4 stable

    Besten Dank für eine kurze Hilfe,
    Thorsten
    also ich betreibe das mit der Standard .htaccess von Contao und da geht es. Das ist die RewriteRule

    Code:
      
    RewriteRule ^[a-z]{2}/$ index.php [L]
    RewriteRule ^([a-z]{2})$ $1/ [R=301,L]
    Wenn du dein Contao nicht im Root betreibst, musst du aber ggfs. die RewriteRule anpassen. Schau doch mal in deine access_log-Datei, welchen Pfad der Server zu öffnen versucht.
    Gruß,
    Helmut
    Blackmail's such an ugly word. I prefer extortion -- the "x" makes it sound cool.
    -- Bender

  5. #5
    Contao-Nutzer
    Registriert seit
    01.11.2012.
    Ort
    Kiel
    Beiträge
    109

    Standard

    Zitat Zitat von hschottm Beitrag anzeigen
    Moin Thorsten,

    also ich betreibe das mit der Standard .htaccess von Contao und da geht es. Das ist die RewriteRule

    Code:
      
    RewriteRule ^[a-z]{2}/$ index.php [L]
    RewriteRule ^([a-z]{2})$ $1/ [R=301,L]
    Wenn du dein Contao nicht im Root betreibst, musst du aber ggfs. die RewriteRule anpassen. Schau doch mal in deine access_log-Datei, welchen Pfad der Server zu öffnen versucht.
    Gruß,
    Helmut
    Diese beiden Regeln kommen nur zum Tragen, wenn du mit verschiedenen Sprachversionen arbeitest und die Sprach-Variable in der URL mit ausgibst (Contao Systemeinstellung: "Die Sprache zur URL hinzufügen").
    Beispiel:
    Die erste Regel leitet http://www.domain.de/de/ (intern, d.h. der Besucher sieht davon nichts) auf die /index.php um.
    Die zweite Regel greift bei fehlendem Slash am Ende der URL, sie leitet z.B. http://www.domain.de/en auf http://www.domain.de/en/ um (extern, d.h. der Browser des Besuchers wird auf http://www.domain.de/en/ umgeleitet) - dann greift wieder die erste Regel.


    Poste doch am Besten mal den Inhalt deiner .htaccess.

  6. #6
    Contao-Fan Avatar von hschottm
    Registriert seit
    15.06.2009.
    Ort
    Loxstedt, Germany
    Beiträge
    825
    User beschenken
    Wunschliste

    Standard

    Verdammt :-)

    Sollte natürlich wie oben die RewriteBase sein. Da war ich geistig nicht ganz auf der Höhe.
    Aber ich hab ja auch kein Problem.
    Thorsten muss sich mal outen, ob er sein Contao in einem Unterverzeichnis betreibt oder nicht und dann am besten seine .htaccess mal posten.
    Eigentlich ist es relativ simpel. Liegt die Installation im Root, muss man eigentlich nichts anpassen und ansonsten ggfs. die RewriteBase.

    Gruß,
    Helmut

    Zitat Zitat von MartinG Beitrag anzeigen
    Diese beiden Regeln kommen nur zum Tragen, wenn du mit verschiedenen Sprachversionen arbeitest und die Sprach-Variable in der URL mit ausgibst (Contao Systemeinstellung: "Die Sprache zur URL hinzufügen").
    Beispiel:
    Die erste Regel leitet http://www.domain.de/de/ (intern, d.h. der Besucher sieht davon nichts) auf die /index.php um.
    Die zweite Regel greift bei fehlendem Slash am Ende der URL, sie leitet z.B. http://www.domain.de/en auf http://www.domain.de/en/ um (extern, d.h. der Browser des Besuchers wird auf http://www.domain.de/en/ umgeleitet) - dann greift wieder die erste Regel.


    Poste doch am Besten mal den Inhalt deiner .htaccess.
    Blackmail's such an ugly word. I prefer extortion -- the "x" makes it sound cool.
    -- Bender

  7. #7
    Contao-Nutzer
    Registriert seit
    14.12.2009.
    Ort
    Offenbach am Main
    Beiträge
    11

    Standard

    Besten Dank schon mal für die bisherige Hilfe!

    Das ist das erste Kundenprojekt, das ich bei HostEurope eingerichtet habe. Bei anderen Hostern hatte ich so ein Problem auch noch nicht …

    Hier weitere Fakten:

    – Bei aktiviertem Umschreiben der URL und "RewriteBase /" gibt es folgenden Server Log-Eintrag:
    "GET /blog/tag/Geschichte+der+Werbung.html HTTP/1.1" 404 1746 "http://domain.de/blog.html"

    – Contao ist im Root angelegt, d.h. ich kann mit dem Standard FTP-Zugang keine Ebene höher gehen. Auf Contao greife ich auch normal über "domain.tld/contao" zu.

    – Das Auskommentieren der Zeile "RewriteBase /" bringt auch keinen Erfolg.

    – Prinzipiell funktioniert die Option "URLs umschreiben" ja bei allen anderen Seiten/Links, es kommt nur zur 404, wenn ich über die Tags filtern möchte (egal ob Tag Cloud oder aus der Beitragsübersicht). Zum Beispiel mit der Syntax "blog/tag/PR.html".

    Hier noch der mod_rewrite-Bereich der htaccess (aus der Standard-Installation, eigentlich nicht geändert):

    <IfModule mod_rewrite.c>
    RewriteEngine On

    ##
    # Change the RewriteBase if your Contao installation is in a subdirectoy and
    # the rewrite rules are not working properly. Usage examples:
    #
    # RewriteBase /contao-2.11.0
    # RewriteBase /path/to/contao
    #
    # Depending on your server, you might have to remove the line entirely.
    ##
    RewriteBase /

    ##
    # Uncomment the following lines and replace "domain.com" with your domain
    # name to redirect requests without "www" to the correct domain.
    ##
    #RewriteCond %{HTTP_HOST} ^domain\.com [NC]
    #RewriteRule (.*) http://www.domain.com/$1 [R=301,L]

    ##
    # If you cannot use mod_deflate, uncomment the following lines to load a
    # compressed .gz version of the aggregated Contao JavaScript and CSS files.
    ##
    #AddEncoding gzip .gz
    #<FilesMatch "\.js\.gz$">
    # AddType "text/javascript" .gz
    #</FilesMatch>
    #<FilesMatch "\.css\.gz$">
    # AddType "text/css" .gz
    #</FilesMatch>
    #RewriteCond %{HTTP:Accept-encoding} gzip
    #RewriteCond %{REQUEST_FILENAME} \.(js|css)$
    #RewriteCond %{REQUEST_FILENAME}.gz -f
    #RewriteRule ^(.*)$ $1.gz [QSA,L]

    ##
    # Do not rewrite requests for static files or folders such as style sheets,
    # images, movies or text documents. Do not add the URL suffix here!
    ##
    <FilesMatch "\.(htm|php|js|css|htc|png|gif|jpe?g|ico|xml|csv|t xt|swf|flv|eot|woff|svg|ttf|pdf|gz)$">
    RewriteEngine Off
    </FilesMatch>

    ##
    # By default, Contao adds ".html" to the generated URLs to simulate static
    # HTML documents. If you change the URL suffix in the back end settings, make
    # sure to change it here accordingly!
    #
    # RewriteRule .*\.html$ index.php [L] # URL suffix .html
    # RewriteRule .*\.txt$ index.php [L] # URL suffix .txt
    # RewriteRule .*\.json$ index.php [L] # URL suffix .json
    #
    # If you do not want to use an URL suffix at all, you have to add a second
    # line to prevent URLs that point to folders from being rewritten (see #4031).
    #
    # RewriteCond %{REQUEST_FILENAME} !-d
    #
    # If you are using mod_cache, it is recommended to use the RewriteRule below,
    # which adds the query string to the internal URL:
    #
    # RewriteRule (.*\.html)$ index.php/$1 [L]
    #
    # Note that not all environments support mod_rewrite and mod_cache.
    ##
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .*\.html$ index.php [L]

    ##
    # The following rules are required if you want to pass the language as first
    # URL parameter (added in Contao 2.11). The first rule rewrites an empty URL
    # to the front end controller, the second one adds a missing trailing slash.
    ##
    RewriteRule ^[a-z]{2}/$ index.php [L]
    RewriteRule ^([a-z]{2})$ $1/ [R=301,L]

    </IfModule>


    Besten Dank schon mal für weitere Tipps!
    Thorsten

  8. #8
    Contao-Nutzer
    Registriert seit
    01.11.2012.
    Ort
    Kiel
    Beiträge
    109

    Standard

    Hm, dann ist es vielleicht ein Problem in der Konfiguration des Hosters, wenn du es bei keinem anderen Hoster so kennst.

    Leider ist der Server Log-Eintrag nicht sehr aussagekräftig, was da wie umgeschrieben wird von mod_rewrite. Könntest du einmal folgendes tun, um zu sehen, ob die RewriteRules bei dem Hoster unerwartet funktionieren:
    • Leg im DocumentRoot (dort, wo auch die index.php von Contao liegt) eine Datei testrewrite.php an mit diesem Inhalt:
      PHP-Code:
      <pre>
      <?php
      $vars 
      = array(
          
      'QUERY_STRING',
          
      'REQUEST_URI',
          
      'SCRIPT_NAME',
          
      'REDIRECT_STATUS',
          
      'REDIRECT_QUERY_STRING',
          
      'REDIRECT_URL'
      );
      foreach (
      $vars as $var) {
          echo 
      '$_SERVER['$var .']: '$_SERVER[$var] ."\n";
      }
      ?>
      </pre>
    • Füge dann in der .htaccess vor der vorhandenen RewriteRule folgenden neuen Block ein:
      Code:
        # NEU
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{QUERY_STRING} .*testrewrite.*
        RewriteRule .*\.html$ testrewrite.php [L]
        # vorhanden
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule .*\.html$ index.php [L]


    Der Block im .htaccess sorgt dafür, dass der Aufruf einer Adresse, die "testrewrite" als Parameter enthält, auf die eben erstellte .php-Datei umgeleitet wird. Diese gibt dann u.a. die aufgerufene Adresse aus und das Ergebnis, das die RewriteRules dann erzeugen.

    Bei mir sieht das Ergebnis dann so aus, wenn ich http://localhost:4001/vhosts/contao-2.11.5/taglanding/tag/ein+tag.html?testrewrite aufrufe:
    Code:
    $_SERVER[QUERY_STRING]: testrewrite
    $_SERVER[REQUEST_URI]: /vhosts/contao-2.11.5/taglanding/tag/ein+tag.html?testrewrite
    $_SERVER[SCRIPT_NAME]: /vhosts/contao-2.11.5/testrewrite.php
    $_SERVER[REDIRECT_STATUS]: 200
    $_SERVER[REDIRECT_QUERY_STRING]: testrewrite
    $_SERVER[REDIRECT_URL]: /vhosts/contao-2.11.5/taglanding/tag/ein+tag.html
    REQUEST_URI ist die im Browser aufgerufene URL, SCRIPT_NAME die tatsächliche Adresse nach den RewriteRules.

    Wie schaut die Ausgabe bei dir aus?

    PS: anschliessend die Datei testrewrite.php und den Block in der .htaccess wieder entfernen.

  9. #9
    Contao-Nutzer
    Registriert seit
    14.12.2009.
    Ort
    Offenbach am Main
    Beiträge
    11

    Standard

    Bei mir kommt dann folgende Ausgabe:

    $_SERVER[QUERY_STRING]: testrewrite
    $_SERVER[REQUEST_URI]: /taglanding/tag/ein+tag.html?testrewrite
    $_SERVER[SCRIPT_NAME]: /testrewrite.php
    $_SERVER[REDIRECT_STATUS]: 200
    $_SERVER[REDIRECT_QUERY_STRING]: testrewrite
    $_SERVER[REDIRECT_URL]: /taglanding/tag/ein+tag.html

    Ist das nun gut oder schlecht?

    Ich habe folgende Adresse eingegeben:
    http://domain.de/taglanding/tag/ein+...ml?testrewrite

    Beste Grüße
    Thorsten

  10. #10
    Contao-Nutzer
    Registriert seit
    01.11.2012.
    Ort
    Kiel
    Beiträge
    109

    Standard

    Das ist soweit gut, es funktioniert wie erwartet.

    Wenn du als URL einmal http://domain.de/blog/tag/Geschichte...ml?testrewrite eingibst, sollte so etwas herauskommen:
    Code:
    $_SERVER[QUERY_STRING]: testrewrite
     $_SERVER[REQUEST_URI]: /blog/tag/Geschichte+der+Werbung.html?testrewrite
     $_SERVER[SCRIPT_NAME]: /testrewrite.php
     $_SERVER[REDIRECT_STATUS]: 200
     $_SERVER[REDIRECT_QUERY_STRING]: testrewrite
     $_SERVER[REDIRECT_URL]: /blog/tag/Geschichte+der+Werbung.html
    Wenn das der Fall ist, scheint das Umschreiben per RewriteRules soweit zu funktionieren.

    Landest du eigentlich auf einer 404-Seite von Contao, oder auf einer 404-Seite deines Hosters?

  11. #11
    Contao-Nutzer
    Registriert seit
    14.12.2009.
    Ort
    Offenbach am Main
    Beiträge
    11

    Standard

    Ich habe das Problem gefunden, es war aber anders gelagert, als zunächst gedacht!

    Es gab bei HostEurope schon eine vom Kunden eingerichtete 301-Weiterleitung der Adresse domain.de/blog. Genau so heißt aber auch die Blogseite – was bei blog.html noch funktionierte, scheiterte dann natürlich bei der Tag-Filter /blog/tag/… und führte zum 404 des Apache Servers. Ich habe nun einfach die html-Bezeichnung der Blog Übersichtsseite umbenannt und so kommt sich das nicht mehr mit der 301 in die Quere und funktioniert problemlos.

    Vielen Dank noch einmal für eure Hilfe, die Tipps haben mich dann doch zum Problem geführt!
    Thorsten

  12. #12
    Contao-Nutzer
    Registriert seit
    01.11.2012.
    Ort
    Kiel
    Beiträge
    109

    Standard

    Aha, das erklärt auch, warum das Umschreiben von /taglanding/tag/xxx.html funktionierte, aber nicht für /blog/tag/xxx.html!

    Gut, dass es nun funktioniert.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •