nginx rewrite Regeln

Dieses Thema im Forum "Installation und Konfiguration" wurde erstellt von DripleX, 19. Aug. 2013.

  1. DripleX

    DripleX New Member

    Ich habe vor kurzen einen Serverumzug vollziehen müssen.
    Dabei bin ich von Debian Squeeze mit Apache2 auf Server Debian Wheezey mit Nginx umgestiegen. Ich bin nach folgender Anleitung vorgegangen:
    The Perfect Server - Debian Wheezy (nginx, BIND, Dovecot, ISPConfig 3) | HowtoForge - Linux Howtos and Tutorials

    Ich habe einen privaten Bilderuploadservice das "MatPo Image Hosting Script".
    Dieses liegt in dem Unterordner "/web/subdomains/bilder/service/"
    Eine Subdomain http://bilder.***.de leitet auf diesen Ordner um.

    Das Script hat folgende .htaccess Datei:
    Code:
    AddDefaultCharset utf-8
    <IfModule mod_rewrite.c>
    	RewriteEngine On
    #de.matpo.mihs.importer.1.4.2
    	RewriteRule ^archiv.html$ archiv.php
    	RewriteRule ^bild/(.*)/(.*)$ bild.php?bild=$1&bild_name=$2
    	RewriteRule ^thumb/(.*)/(.*)$ bild.php?tumbnail=2&bild=$1&bild_name=$2
    #/de.matpo.mihs.importer.1.4.2
    	RewriteRule ^([a-z0-9\_\.]+).html$ index.php?seite=$1 [L,QSA]
    #/de.matpo.mihs
    	RewriteRule ^profil-([0-9]+).html$ index.php?seite=mitglieder.$1 [L,QSA]
    	RewriteRule ^display-([a-z0-9]+).html$ index.php?seite=display&img=$1 [L,QSA]
    	RewriteRule ^display.([a-z0-9]+)-([a-z0-9]+).html$ index.php?seite=display.$1&img=$2 [L,QSA]
    	RewriteRule ^images-([a-z0-9]+).([a-z0-9]+)$ images.php?img=$1
    	RewriteRule ^(thumb|ihsthumb)-([a-z0-9]+).([a-z0-9]+)$ images.php?img=$2,$1
    #/de.matpo.mihs.mihs
    #de.matpo.mfw.page.mod_rewrite.add#
    </IfModule>
    # Text für individuelle Fehleranzeige
    ErrorDocument 401 /index.php
    ErrorDocument 403 /index.php
    ErrorDocument 404 /index.php
    ErrorDocument 410 /index.php
    ErrorDocument 500 /index.php
    Ich habe nun mit Hilfe von htaccess to nginx converter , das Script in die nginx "Sprache" übersetzen lassen.
    Code:
    # nginx configuration
    
    charset utf-8;
    
    error_page 500 /index.php;
    
    error_page 404 /index.php;
    
    error_page 403 /index.php;
    
    location = /archiv.html {
      rewrite ^(.*)$ /archiv.php;
    }
    
    location /bild {
      rewrite ^/bild/(.*)/(.*)$ /bild.php?bild=$1&bild_name=$2;
    }
    
    location /thumb {
      rewrite ^/thumb/(.*)/(.*)$ /bild.php?tumbnail=2&bild=$1&bild_name=$2;
      rewrite ^/(thumb|ihsthumb)-([a-z0-9]+).([a-z0-9]+)$ /images.php?img=$2,$1;
    }
    
    location / {
      rewrite ^/([a-z0-9\_\.]+).html$ /index.php?seite=$1 break;
    }
    
    location /profil {
      rewrite ^/profil-([0-9]+).html$ /index.php?seite=mitglieder.$1 break;
    }
    
    location /display {
      rewrite ^/display-([a-z0-9]+).html$ /index.php?seite=display&img=$1 break;
      rewrite ^/display.([a-z0-9]+)-([a-z0-9]+).html$ /index.php?seite=display.$1&img=$2 break;
    }
    
    location /images {
      rewrite ^/images-([a-z0-9]+).([a-z0-9]+)$ /images.php?img=$1;
    }
    
    location /ihsthumb {
      rewrite ^/(thumb|ihsthumb)-([a-z0-9]+).([a-z0-9]+)$ /images.php?img=$2,$1;
    }
    In den service Ordner habe ich eine nginx.conf Datei mit dem obigen Inhalt erzeugt. Ich habe dann in ISPConfig 3 in den Domain Optionen bei "nginx Direktiven" folgendes hinzugefügt.
    Code:
    include /var/www/***.de/web/subdomains/bilder/service/nginx.conf
    Das Problem ist, das die Rewrite Regeln nicht funktionieren, da sie wahrscheinlich falsch übersetzt worden sind. Leider kenne ich mich damit nicht so gut aus.

    Folgendes soll funktionieren:
    Also früher konnte ich ein Bild mit dem Link Aufrufen:
    Code:
    http://bilder.***.de/service/bild.php/251,lastfm7CXK1.gif
    Der neue Link lautet:
    Code:
    http://bilder.***.de/service/images.php?img=i251bpfv9q.gif
    Was kann ich machen damit dies wieder funktioniert?
     
  2. DripleX

    DripleX New Member

    Ich habe mittlerweile eine richtige Subdomain bei mir angelegt: http: //bilder.***.de
    In dem Unterordner "service" liegt das Script.

    Ich habe nun mit einen anderen .htaccess to Nginx Übersetzer die Rewrite Regeln umwandeln lassen:
    Code:
    charset utf-8; 
    rewrite ^/service/archiv.html$ /service/archiv.php; 
    rewrite ^/service/bild/(.*)/(.*)$ /service/bild.php?bild=$1&bild_name=$2; 
    rewrite ^/service/thumb/(.*)/(.*)$ /service/bild.php?tumbnail=2&bild=$1&bild_name=$2; 
    rewrite ^/service/([a-z0-9\_\.]+).html$ /service/index.php?seite=$1 last; 
    rewrite ^/service/profil-([0-9]+).html$ /service/index.php?seite=mitglieder.$1 last; 
    rewrite ^/service/display-([a-z0-9]+).html$ /service/index.php?seite=display&img=$1 last; 
    rewrite ^/service/display.([a-z0-9]+)-([a-z0-9]+).html$ /service/index.php?seite=display.$1&img=$2 last; 
    rewrite ^/service/images-([a-z0-9]+).([a-z0-9]+)$ /service/images.php?img=$1; 
    rewrite ^/service/(thumb|ihsthumb)-([a-z0-9]+).([a-z0-9]+)$ /service/images.php?img=$2/$1; 
    Aber leider scheinen diese auch nicht zu funktionieren?.
    Weiß denn keiner eine Lösung?
     
  3. magenbrot

    magenbrot Member

    also erstmal würde ich die rewrites in einem "location /service { ... }" verpacken.

    Dann aktiviere mal "rewrite_log on" und schau im error_log was denn da so bei deinen rewrites passiert. Vielleicht hilft das schon.
     
  4. DripleX

    DripleX New Member

    Danke für deine Antwort!
    Leider funktioniert es trotzdem nicht.

    Folgendes habe ich probiert:
    Code:
    charset utf-8;
    rewrite_log on;
    location /service {
    rewrite ^/archiv.html$ /archiv.php;
    rewrite ^/bild/(.*)/(.*)$ /bild.php?bild=$1&bild_name=$2;
    rewrite ^/thumb/(.*)/(.*)$ /bild.php?tumbnail=2&bild=$1&bild_name=$2 ;
    rewrite ^/([a-z0-9\_\.]+).html$ /index.php?seite=$1 last;
    rewrite ^/profil-([0-9]+).html$ /index.php?seite=mitglieder.$1 last;
    rewrite ^/display-([a-z0-9]+).html$ /index.php?seite=display&img=$1 last;
    rewrite ^/display.([a-z0-9]+)-([a-z0-9]+).html$ /index.php?seite=display.$1&img=$2 last;
    rewrite ^/images-([a-z0-9]+).([a-z0-9]+)$ /images.php?img=$1;
    rewrite ^/(thumb|ihsthumb)-([a-z0-9]+).([a-z0-9]+)$ /images.php?img=$2/$1;
    }
    Ich nehme mal an, dass dies die richtigen rewrite Regeln sind.

    Und
    Code:
    charset utf-8;
    rewrite_log on;
    location /service {
    rewrite ^/service/archiv.html$ /service/archiv.php;
    rewrite ^/service/bild/(.*)/(.*)$ /service/bild.php?bild=$1&bild_name=$2;
    rewrite ^/service/thumb/(.*)/(.*)$ /service/bild.php?tumbnail=2&bild=$1&bild_name=$2 ;
    rewrite ^/service/([a-z0-9\_\.]+).html$ /service/index.php?seite=$1 last;
    rewrite ^/service/profil-([0-9]+).html$ /service/index.php?seite=mitglieder.$1 last;
    rewrite ^/service/display-([a-z0-9]+).html$ /service/index.php?seite=display&img=$1 last;
    rewrite ^/service/display.([a-z0-9]+)-([a-z0-9]+).html$ /service/index.php?seite=display.$1&img=$2 last;
    rewrite ^/service/images-([a-z0-9]+).([a-z0-9]+)$ /service/images.php?img=$1;
    rewrite ^/service/(thumb|ihsthumb)-([a-z0-9]+).([a-z0-9]+)$ /service/images.php?img=$2/$1;
    }
    Bei beiden Variationen steht im error_log:
    Code:
    2013/08/30 15:45:02 [error] 29793#0: *1 open() "/var/www/bilder.xxx.de/web/service/bild.php/161,bmwsigpng6BBNL.png" failed (20: Not a directory), client: 178.27.xxx.xxx, server: bilder.xxx.de, request: "GET /service/bild.php/161,bmwsigpng6BBNL.png HTTP/1.1", host: "bilder.xxx.de"
    2013/08/30 15:45:03 [error] 29793#0: *1 open() "/var/www/bilder.xxx.de/web/service/bild.php/161,bmwsigpng6BBNL.png" failed (20: Not a directory), client: 178.27.xxx.xxx, server: bilder.xxx.de, request: "GET /service/bild.php/161,bmwsigpng6BBNL.png HTTP/1.1", host: "bilder.xxx.de"
    Ich habe auch nach jeder Änderung nginx und php5-fpm neu gestartet!

    Es scheint so, als ob das "rewrite_log" nicht aktiviert ist.
     
  5. DripleX

    DripleX New Member

    Also noch mal ein bisschen von vorne:

    Es soll die Url zb:
    Code:
    http://bilder.xxx.de/service/bild.php/294,bmwsig0MY2P.jpg
    in
    Code:
    http://bilder.xxx.de/service/images.php?img=i303beh68u.jpg
    Dafür gibt es folgende .htaccess Regel:
    Code:
    RewriteRule ^bild/(.*)/(.*)$ images.php?img=$1
    Ich denke mal, das an dieser Regel auch schon etwas nicht stimmt.

    Auf jeden Fall funktioniert die umgewandelte Funktion in nginx nicht:
    Code:
    rewrite ^/bild/(.*)/(.*)$ /images.php?img=$1;
    Wahrscheinlich stimmt was mit dem "*" nicht... Die Regel wird einfach nicht ausgeführt!

    Hier einmal die komplette site-enabled-***.vhost
    Code:
    server {
            listen *:80;
    
    
            server_name bilder.xxx.de www.bilder.xxx.de;
    
            root   /var/www/bilder.xxx.de/web;
    
    
    
            index index.html index.htm index.php index.cgi index.pl index.xhtml;
    
    
            location ~ \.shtml$ {
                ssi on;
            }
    
    
            error_page 400 /error/400.html;
            error_page 401 /error/401.html;
            error_page 403 /error/403.html;
            error_page 404 /error/404.html;
            error_page 405 /error/405.html;
            error_page 500 /error/500.html;
            error_page 502 /error/502.html;
            error_page 503 /error/503.html;
            recursive_error_pages on;
            location = /error/400.html {
    
                internal;
            }
            location = /error/401.html {
    
                internal;
            }
    		location = /error/403.html {
    
                internal;
            }
            location = /error/404.html {
    
                internal;
            }
            location = /error/405.html {
    
                internal;
            }
            location = /error/500.html {
    
                internal;
            }
            location = /error/502.html {
    
                internal;
            }
            location = /error/503.html {
    
                internal;
            }
    
            error_log /var/log/ispconfig/httpd/bilder.xxx.de/error.log;
            access_log /var/log/ispconfig/httpd/bilder.xxx.de/access.log combined;
    
            location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
            }
    
            location = /favicon.ico {
    			log_not_found off;
                access_log off;
            }
    
            location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
            }
    
            location /stats {
    
                index index.html index.php;
                auth_basic "Members Only";
                auth_basic_user_file /var/www/clients/client2/web18/web/stats/.htpasswd_stats;
            }
    
            location ^~ /awstats-icon {
                alias /usr/share/awstats/icon;
            }
    
            location ~ \.php$ {
                try_files /7454dffa8986bb7d9f10373de1ca23e1.htm @php;
            }
    
            location @php {
                try_files $uri =404;
                include /etc/nginx/fastcgi_params;
                fastcgi_pass 127.0.0.1:9027;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_intercept_errors on;
            }
    
            location /cgi-bin/ {
                try_files $uri =404;
                include /etc/nginx/fastcgi_params;
                root /var/www/clients/client2/web18;
                gzip off;
                fastcgi_pass  unix:/var/run/fcgiwrap.socket;
                fastcgi_index index.cgi;
                fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_intercept_errors on;
            }
    
    
    
            charset utf-8;
            rewrite_log on;
            location /service {
            rewrite ^/archiv.html$ /archiv.php;
            rewrite ^/bild/(.*)/(.*)$ /images.php?img=$1;
            rewrite ^/thumb/(.*)/(.*)$ /bild.php?tumbnail=2&bild=$1&bild_name=$2;
            rewrite ^/([a-z0-9\_\.]+).html$ /index.php?seite=$1 last;
            rewrite ^/profil-([0-9]+).html$ /index.php?seite=mitglieder.$1 last;
            rewrite ^/display-([a-z0-9]+).html$ /index.php?seite=display&img=$1 last;
            rewrite ^/display.([a-z0-9]+)-([a-z0-9]+).html$ /index.php?seite=display.$1&img=$2 last;
            rewrite ^/images-([a-z0-9]+).([a-z0-9]+)$ /images.php?img=$1;
            rewrite ^/(thumb|ihsthumb)-([a-z0-9]+).([a-z0-9]+)$ /images.php?img=$2/$1;
            }
    
    
    }
    Was habe ich falsch gemacht?
     
  6. F4RR3LL

    F4RR3LL Member

    Es ist zwar ein alter Beitrag, aber da ich grade selber Matpo auf einem nginx Server installieren musste, hier die richtige Nginx direktive, welche ich sonst auch nirgends im Netz finden konnte.
    Einfach unter Optionen Nginx Direktiven folgendes einfügen, speichern, glücklich sein:

    Code:
    location / {
    rewrite ^/([a-z0-9\_\.]+).html$ /index.php?seite=$1 last;
    rewrite ^/profil-([0-9]+).html$ /index.php?seite=mitglieder.$1 last;
    rewrite ^/display-([a-z0-9]+).html$ /index.php?seite=display&img=$1 last;
    rewrite ^/display.([a-z0-9]+)-([a-z0-9]+).html$ /index.php?seite=display.$1&img=$2 last;
    rewrite ^/images-([a-z0-9]+).([a-z0-9]+)$ /images.php?img=$1 ;
    rewrite ^/(thumb|ihsthumb)-([a-z0-9]+).([a-z0-9]+)$ /images.php?img=$2/$1 ;
    rewrite ^/faq-([a-z0-9\_\.]+).html$ /index.php?seite=faq&item=$1 last;
    }
    
    Gruß Sven
     
  7. DripleX

    DripleX New Member

  8. F4RR3LL

    F4RR3LL Member

    Dann mal anders, welche Version haste denn?
    Damit habe ich es laufen. Eine bilder.php gibts bei mir auch nicht , wohl aber eine images.php.
    Code:
    MatPo Framework Version1.1.5
    MatPo Images Hosting Script Version1.1.3
    PHP Version5.4.35-0+deb7u2
    Datenbank VersionMySQL 5.5.40-0+wheezy1
    ServerLinux
    Server Softwarenginx/1.2.1
    

    Gruß Sven
     
  9. DripleX

    DripleX New Member

    Eine ältere als du. Ich hatte davor aber eine sehr alte Version. Dafür gab es dann einen "Importer"...
    Code:
    MatPo MIHS Version    1.0.13
    MatPo Framework Version    1.0.15
    PHP Version    5.4.35-0+deb7u2
    Datenbank Version    MySQL 5.5.40-0+wheezy1
    Server    Linux
    Server Software    nginx/1.2.1
    Updaten wird wahrscheinlich auch nicht gehen, da eben nur die alten Links von den alten Bildern nicht mehr gehen.
    Hier meine aktuellen nginx Direktiven:
    Code:
    charset utf-8;
    location /service {
    rewrite ^/service/archiv.html$ /service/archiv.php ;
    rewrite ^/service/bild/(.*)/(.*)$ /service/bild.php?bild=$1&bild_name=$2 ;
    rewrite ^/service/thumb/(.*)/(.*)$ /service/bild.php?tumbnail=2&bild=$1&bild_name=$2 ;
    rewrite ^/service/([a-z0-9\_\.]+).html$ /service/index.php?seite=$1 last;
    rewrite ^/service/profil-([0-9]+).html$ /service/index.php?seite=mitglieder.$1 last;
    rewrite ^/service/display-([a-z0-9]+).html$ /service/index.php?seite=display&img=$1 last;
    rewrite ^/service/display.([a-z0-9]+)-([a-z0-9]+).html$ /service/index.php?seite=display.$1&img=$2 last;
    rewrite ^/service/images-([a-z0-9]+).([a-z0-9]+)$ /service/images.php?img=$1 ;
    rewrite ^/service/(thumb|ihsthumb)-([a-z0-9]+).([a-z0-9]+)$ /service/images.php?img=$2/$1 ;
    }
     

Diese Seite empfehlen