Ergebnis 1 bis 12 von 12

Thema: Mod_Rewrite Problemchen

  1. #1
    Contao-Nutzer
    Registriert seit
    21.01.2010.
    Beiträge
    30

    Standard Mod_Rewrite Problemchen

    Ich habe ein Problem, wo ich im Vorfeld dachte "das ist ja ganz einfach, mal eben..."

    Ich habe eine Seite im Seitenbaum mit dem Alias "infos".
    Meine Dateierweiterung lautet standardgemäß ".html"

    Der Aufruf der Seite (mit zusätzlichen Parametern, die ich benötige), klappt einwandfrei:
    http://hostname.de/infos.html?kid=1&...itle=Hallowelt

    Jetzt möchte ich gerne die Seite per mod_rewrite wie folgt aufrufen können:
    http://hostname.de/infos/1/1/Hallowelt

    und habe mir dazu testweise die Rewrite Rule mit einer 301er Weiterleitung angelegt
    Code:
    RewriteRule ^infos/(.*)/(.*)/(.*)$ /infos.html?kid=$1&tid=$2&title=$3 [R=301,L]
    Das klappt auch.
    Der Browser ruft dann die Seite
    http://hostname.de/infos.html?kid=1&...itle=Hallowelt
    auf.

    Soweit so gut - die Regel greift also.

    Jetzt will ich aber keine 301er haben (weil dann nämlich doch die reale URL im Browser steht und Google diese auch so indizieren würde), sondern eine interne Umleitung bzw ein Rewriting.

    Also habe ich die Regel angepasst
    Code:
    RewriteRule ^infos/(.*)/(.*)/(.*)$ /infos.html?kid=$1&tid=$2&title=$3 [NC,L]
    Aber dann meldet Contao einen 404er.
    Im Log steht dann
    No active page for page ID "", host "hostname.de" and languages "de-DE, de, en-US, en" (http://hostname.de/infos/1/1/Hallowelt)


    Bei einer 301er Weiterleitung ruft der Browser die Seite tatsächlich also als infos.html auf, beim Rewriting der URL passiert das aber anscheinend nicht - sodass Contao den Alias/die Page ID nicht ermitteln kann.
    Was mache ich falsch?


    Ich denke, hier kommen sich ggf bestehende Rewrite-Regeln ins Gehege, da ja bei Aufruf von infos.html grundsätzlich eh schon ein Rewriting greift, damit Contao die index.php/infos.html aufruft.
    Geändert von EternaX (19.01.2016 um 11:48 Uhr)

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.390
    Partner-ID
    10107

    Standard

    Ich denke
    Code:
    RewriteRule ^infos/(.*)/(.*)/(.*)$ index.php/infos.html?kid=$1&tid=$2&title=$3 [NC,L]
    vor
    Code:
    RewriteCond %{REQUEST_FILENAME} !\.(htm|php|js|css|htc|png|gif|jpe?g|ico|xml|csv|txt|swf|flv|mp4|webm|ogv|mp3|ogg|oga|eot|otf|tt[cf]|woff2?|svgz?|pdf|gz)$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .*\.html$ index.php [L]
    sollte funktionieren.

  3. #3
    Contao-Nutzer
    Registriert seit
    21.01.2010.
    Beiträge
    30

    Standard

    Sie ist schon vor dem von Dir genannten Abschnitt definiert, Spooky.
    Testweise hatte ich sie auch mal danach definiert - das Ergebnis ist dasselbe =(

  4. #4
    Contao-Nutzer
    Registriert seit
    21.01.2010.
    Beiträge
    30

    Standard

    In meinem Apache mod_rewrite Log sehe ich auch Folgendes:
    Code:
    192.168.x.x - xxxxx [19/Jan/2016:13:14:11 +0100] [hostname.de/sid#b741db00][rid#b6292058/initial] (2) [perdir /var/www/contao01/] rewrite 'infos/1/1/Hallowelt' -> '/infos.html?kid=1&tid=1&title=Hallowelt'
    192.168.x.x - xxxxx [19/Jan/2016:13:14:11 +0100] [hostname.de/sid#b741db00][rid#b6292058/initial] (1) [perdir /var/www/contao01/] internal redirect with /infos.html [INTERNAL REDIRECT]
    192.168.x.x - xxxxx [19/Jan/2016:13:14:11 +0100] [hostname.de/sid#b741db00][rid#b6295980/initial/redir#1] (2) [perdir /var/www/contao01/] rewrite 'infos.html' -> 'index.php'
    192.168.x.x - xxxxx [19/Jan/2016:13:14:11 +0100] [hostname.de/sid#b741db00][rid#b6295980/initial/redir#1] (2) [perdir /var/www/contao01/] strip document_root prefix: /var/www/contao01/index.php -> /index.php
    192.168.x.x - xxxxx [19/Jan/2016:13:14:11 +0100] [hostname.de/sid#b741db00][rid#b6295980/initial/redir#1] (1) [perdir /var/www/contao01/] internal redirect with /index.php [INTERNAL REDIRECT]
    192.168.x.x - xxxxx [19/Jan/2016:13:14:11 +0100] [hostname.de/sid#b741db00][rid#b626a360/initial/redir#2] (1) [perdir /var/www/contao01/] pass through /var/www/contao01/index.php
    Ich habe es danach auch schonmal probiert, statt nur auf infos.html umzuschreiben auch mal auf index.php/infos.html zu rewriten... auch kein Erfolg... =(
    Geändert von EternaX (19.01.2016 um 12:58 Uhr)

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.390
    Partner-ID
    10107

    Standard

    Zitat Zitat von EternaX Beitrag anzeigen
    Ich habe es danach auch schonmal probiert, statt nur auf infos.html umzuschreiben auch mal auf index.php/infos.html zu rewriten... auch kein Erfolg... =(
    Was zeigt das Apache Log in dem Fall?

  6. #6
    Contao-Nutzer
    Registriert seit
    21.01.2010.
    Beiträge
    30

    Standard

    Einen 404 Fehler (den Contao ja dann auch über die be_no_page darstellt)

    Code:
    192.168.x.x - xxxxx [19/Jan/2016:13:34:18 +0100] "GET /infos/1/1/Hallowelt HTTP/1.1" 404 5651 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.390
    Partner-ID
    10107

    Standard

    Das ist nur der GET Eintrag, mir ginge es um die Log Einträge über das Rewriting. Idealerweise sollte dort stehen:
    Code:
    192.168.x.x - xxxxx [19/Jan/2016:**:**:** +0100] [hostname.de/sid#b741db00][rid#b6292058/initial] (2) [perdir /var/www/contao01/] rewrite 'infos/1/1/SEAT' -> 'index.php/infos.html?kid=1&tid=1&title=SEAT'

  8. #8
    Contao-Nutzer
    Registriert seit
    21.01.2010.
    Beiträge
    30

    Standard

    Genau das steht auch drin, wenn ich das Rewriting auf /index.php/infos.html lege

    Code:
    192.168.x.x - xxxxx [19/Jan/2016:13:34:18 +0100] [hostname.de/sid#b741db00][rid#b6260058/initial] (2) [perdir /var/www/contao01/] rewrite 'infos/1/1/Hallowelt' -> '/index.php/infos.html?kid=1&tid=1&title=Hallowelt'
    192.168.x.x - xxxxx [19/Jan/2016:13:34:18 +0100] [hostname.de/sid#b741db00][rid#b6260058/initial] (1) [perdir /var/www/contao01/] internal redirect with /index.php/infos.html [INTERNAL REDIRECT]
    192.168.x.x - xxxxx [19/Jan/2016:13:34:18 +0100] [hostname.de/sid#b741db00][rid#b626daa0/initial/redir#1] (1) [perdir /var/www/contao01/] pass through /var/www/contao01/index.php
    192.168.x.x - xxxxx [19/Jan/2016:13:34:18 +0100] [hostname.de/sid#b741db00][rid#b626a058/subreq] (2) [perdir /var/www/contao01/] rewrite 'infos.html' -> 'index.php'
    192.168.x.x - xxxxx [19/Jan/2016:13:34:18 +0100] [hostname.de/sid#b741db00][rid#b626a058/subreq] (2) [perdir /var/www/contao01/] strip document_root prefix: /var/www/contao01/index.php -> /index.php

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.390
    Partner-ID
    10107

    Standard

    Poste nochmal deine gesamte .htaccess, in deinem Log steht nämlich auch noch
    Code:
    192.168.x.x - xxxxx [19/Jan/2016:13:34:18 +0100] [hostname.de/sid#b741db00][rid#b626a058/subreq] (2) [perdir /var/www/contao01/] rewrite 'infos.html' -> 'index.php'

  10. #10
    Contao-Nutzer
    Registriert seit
    21.01.2010.
    Beiträge
    30

    Standard

    Code:
    AuthName "Testserver"
    AuthType Basic
    AuthUserFile /var/www/contao01/.htpasswd
    require valid-user
    
    ErrorDocument 404 /error.php?error=404
    
    
    ##
    # Contao Open Source CMS
    #
    # Copyright (c) 2005-2014 Leo Feyer
    #
    # @package Core
    # @link    https://contao.org
    # @license http://www.gnu.org/licenses/lgpl-3.0.html LGPL
    ##
    
    ##
    # Prevent access to the Contao template files
    ##
    <FilesMatch "\.(tpl|html5|xhtml)$">
      <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
      </IfModule>
      <IfModule mod_authz_core.c>
        Require all denied
      </IfModule>
    </FilesMatch>
    
    ##
    # Allow access from all domains for webfonts
    # @see https://github.com/h5bp/html5-boilerplate
    ##
    <IfModule mod_headers.c>
      <FilesMatch "\.(ttf|ttc|otf|eot|woff|font\.css)$">
        Header set Access-Control-Allow-Origin "*"
      </FilesMatch>
    </IfModule>
    
    ##
    # Disable ETags
    # @see http://developer.yahoo.com/performance/rules.html#etags
    ##
    FileETag None
    <IfModule mod_headers.c>
      Header unset ETag
    </IfModule>
    
    ##
    # Set the proper MIME types
    # @see https://github.com/h5bp/html5-boilerplate
    ##
    <IfModule mod_mime.c>
      AddType application/javascript              js jsonp
      AddType application/json                    json
      AddType audio/ogg                           oga ogg
      AddType audio/mp4                           m4a f4a f4b
      AddType video/ogg                           ogv
      AddType video/mp4                           mp4 m4v f4v f4p
      AddType video/webm                          webm
      AddType video/x-flv                         flv
      AddType image/svg+xml                       svg svgz
      AddEncoding gzip                            svgz
      AddType application/vnd.ms-fontobject       eot
      AddType application/x-font-ttf              ttf ttc
      AddType font/opentype                       otf
      AddType application/x-font-woff             woff
      AddType image/x-icon                        ico
      AddType image/webp                          webp
      AddType text/cache-manifest                 appcache manifest
      AddType text/x-component                    htc
      AddType application/xml                     rss atom xml rdf
      AddType application/x-web-app-manifest+json webapp
      AddType text/x-vcard                        vcf
      AddType application/x-shockwave-flash       swf
      AddType text/css 							  .css
      AddType text/javascript 					  .js
    </IfModule>
    
    ##
    # Gzip compression
    # @see https://github.com/h5bp/html5-boilerplate
    ##
    <IfModule mod_deflate.c>
      <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
        AddOutputFilterByType DEFLATE application/javascript
        AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
        AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
        AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
      </IfModule>
    </IfModule>
    
    ##
    # Expires headers (for better cache control)
    # @see https://github.com/h5bp/html5-boilerplate
    ##
    <IfModule mod_expires.c>
      ExpiresActive on
    
      ##
      # Productional website
      ##
      ExpiresByType text/cache-manifest           "access plus 0 seconds"
      ExpiresByType text/html                     "access plus 0 seconds"
      ExpiresByType text/xml                      "access plus 0 seconds"
      ExpiresByType application/xml               "access plus 0 seconds"
      ExpiresByType application/json              "access plus 0 seconds"
      ExpiresByType application/rss+xml           "access plus 1 hour"
      ExpiresByType application/atom+xml          "access plus 1 hour"
      ExpiresByType image/gif                     "access plus 1 month"
      ExpiresByType image/png                     "access plus 1 month"
      ExpiresByType image/jpeg                    "access plus 1 month"
      ExpiresByType image/x-icon                  "access plus 1 month"
      ExpiresByType video/ogg                     "access plus 1 month"
      ExpiresByType audio/ogg                     "access plus 1 month"
      ExpiresByType video/mp4                     "access plus 1 month"
      ExpiresByType video/webm                    "access plus 1 month"
      ExpiresByType text/x-component              "access plus 1 month"
      ExpiresByType application/x-font-ttf        "access plus 1 month"
      ExpiresByType font/opentype                 "access plus 1 month"
      ExpiresByType application/x-font-woff       "access plus 1 month"
      ExpiresByType image/svg+xml                 "access plus 1 month"
      ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
      ExpiresByType text/css                      "access plus 1 year"
      ExpiresByType application/javascript        "access plus 1 year"
    
      ##
      # Disable caching during development
      # @see https://github.com/contao/core/issues/4364
      ##
      #ExpiresByType text/cache-manifest           "access"
      #ExpiresByType text/html                     "access"
      #ExpiresByType text/xml                      "access"
      #ExpiresByType application/xml               "access"
      #ExpiresByType application/json              "access"
      #ExpiresByType application/rss+xml           "access"
      #ExpiresByType application/atom+xml          "access"
      #ExpiresByType image/gif                     "access"
      #ExpiresByType image/png                     "access"
      #ExpiresByType image/jpeg                    "access"
      #ExpiresByType image/x-icon                  "access"
      #ExpiresByType video/ogg                     "access"
      #ExpiresByType audio/ogg                     "access"
      #ExpiresByType video/mp4                     "access"
      #ExpiresByType video/webm                    "access"
      #ExpiresByType text/x-component              "access"
      #ExpiresByType application/x-font-ttf        "access"
      #ExpiresByType font/opentype                 "access"
      #ExpiresByType application/x-font-woff       "access"
      #ExpiresByType image/svg+xml                 "access"
      #ExpiresByType application/vnd.ms-fontobject "access"
      #ExpiresByType text/css                      "access"
      #ExpiresByType application/javascript        "access"
    
    </IfModule>
    
    ##
    # Header adjustments
    ##
    <IfModule mod_headers.c>
    
      ##
      # Disable caching during development
      # @see https://github.com/contao/core/issues/4364
      ##
      #Header unset Cache-Control
      #Header append Cache-Control must-revalidate
    
      ##
      # Do not cache the cron.txt file
      # @see https://github.com/contao/core/issues/5105
      ##
      <FilesMatch "cron\.txt$">
        Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform"
      </FilesMatch>
    
      ##
      # Add a Vary Accept-Encoding header for the compressed resources. If you
      # modify the file types above, make sure to change them here accordingly.
      # @see http://developer.yahoo.com/performance/rules.html#gzip
      #
      # Note: If you are using a case-sensitive file system like HFS+ or ext4, you
      # have to change the <FilesMatch> directive as follows:
      #
      # <FilesMatch "\.(?i:js|css|xml|gz|svgz)$">
      #
      # For more information see: https://github.com/contao/core/issues/4364
      ##
      <FilesMatch "\.(js|css|xml|gz|svgz)$">
        Header append Vary Accept-Encoding
      </FilesMatch>
    
    </IfModule>
    
    ##
    # Disable MultiViews if you are having issues with requests returning the wrong
    # page. Requires AllowOverride Options=All,MultiViews to be set here.
    # @see https://github.com/contao/core/issues/3521
    ##
    #Options -MultiViews
    
    ##
    # URL rewriting
    ##
    <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-3.0.0
      #   RewriteBase /path/to/contao
      #
      # Depending on your server, you might have to remove the line entirely.
      ##
      #RewriteBase /
    
    
      RewriteCond  %{HTTP_HOST} ^downloads\.hostname\.de$ [NC]
      RewriteRule ^pdf/(.*)$ /files/downloads/pdf/$1 [NC,L]
      
      
      RewriteCond %{HTTP_HOST} ^www\.test\.hostname\.de$ [NC]
      RewriteRule ^(.*).asp$ http://www.test.hostname.de/$1.html [R=301,L]
    
      #RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
      #RewriteCond %{REQUEST_URI} ^/infos(.*)$ [NC]
      #RewriteRule ^infos/(.*)/(.*)/(.*)$ /infos.html?kid=$1&tid=$2&title=$3 [R=301,L]
      RewriteRule ^infos/(.*)/(.*)/(.*)$ /index.php/infos.html?kid=$1&tid=$2&title=$3
      
      RewriteCond %{QUERY_STRING}     ^(.*)k=(.*)$    [NC]
      RewriteRule ^(.*)common.pdf.getPDF.asp$  http://media.hostname.de/%2?var=dealer [L,R=302]
    
     
      ##
      # Uncomment the following lines to add "www." to the domain:
      #
      #   RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
      #   RewriteRule (.*) http://www.example.com/$1 [R=301,L]
      #
      # Uncomment the following lines to remove "www." from the domain:
      #
      #   RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
      #   RewriteRule (.*) http://example.com/$1 [R=301,L]
      #
      # Make sure to replace "example.com" with your domain name.
      ##
    
      ##
      # 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 "application/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]
    
      ##
      # 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
      #   RewriteRule .* index.php [L]
      #
      # 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} !\.(htm|php|js|css|htc|png|gif|jpe?g|ico|xml|csv|txt|swf|flv|mp4|webm|ogv|mp3|ogg|oga|eot|woff|svg|svgz|ttf|gz)$
      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 the empty URL
      # to the front end controller, the second one adds a missing trailing slash.
      ##
      # RewriteRule ^[a-z]{2}(\-[A-Z]{2})?/$ index.php [L]
      # RewriteRule ^([a-z]{2}(\-[A-Z]{2})?)$ $1/ [R=301,L]
    
    </IfModule>

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.390
    Partner-ID
    10107

    Standard

    Hm, ich glaube dass du hier bei deinem Modul selbst Anpassungen vornehmen musst. Contao ermittelt ja aus dem Request String dann welche Page und welche Parameter aufgerufen wurden. Und die bleiben ohne 301 Redirect auf infos/x/y/z. Du müsstest mit einem getPageIdFromUrl die entsprechenden Parameter abgreifen bzw. dann mit \Input::setGet(…) setzen und den Page Alias zurück geben.

  12. #12
    Contao-Nutzer
    Registriert seit
    21.01.2010.
    Beiträge
    30

    Standard

    Also ich habe das ganze jetzt - vorerst - über eine eigene Weiterleitungsseite gelöst, die im assets-Ordner meiner Erweiterung verortet ist, auf die per Rewrite in der .htaccess-Datei verwiesen wird:

    Code:
    RewriteRule ^infos/(.*)/(.*)/(.*)$ /system/modules/meine_erweiterung/assets/mod_rewrite.php?kid=$1&tid=$2&title=$3
    In der Datei mod_rewrite.php werden dann die Parameter ausgewertet, die tatsächlich benötigte Contao-Seiten URL zusammengesetzt (meinhost.de/infos.html?kid=1&tid=2&title=Hallowelt) und per file_get_contents() ausgelesen und dargestellt.

    Nicht so ganz schön, aber funktioniert erstmal so... =/

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
  •