mod_rewrite Problem
JOhn
- webserver
0 JOhn0 Edgar Ehritt0 John0 John0 Edgar Ehritt0 John0 Edgar Ehritt0 John0 Edgar Ehritt0 JOhn
Hallo.
Mein Server(Debian) hat die Webfiles unter:
/var/www
Meine htaccess funktioniert aber irgendwie nicht.
Unter localhost funktionierts mit:
RewriteEngine On
AddCharset utf-8 .css .html .php .js
AddDefaultCharset utf-8
DirectoryIndex index.php
RewriteBase /
ErrorDocument 404 /404-Fehler/
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)?$ index.php?p=$1&id=$2&a=$3&b=$4&c=$5&d=$6
RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?$ index.php?p=$1&id=$2&a=$3&b=$4&c=$5&d=$6
Unter Debian funktioniert es weder so wie da oben noch so:
RewriteEngine On
AddCharset utf-8 .css .html .php .js
AddDefaultCharset utf-8
DirectoryIndex index.php
RewriteBase /var/www/
ErrorDocument 404 /404-Fehler/
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)?$ index.php?p=$1&id=$2&a=$3&b=$4&c=$5&d=$6
RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?$ index.php?p=$1&id=$2&a=$3&b=$4&c=$5&d=$6
Woran liegt das?
Achja, so sieht meine httpd.conf aus:
DocumentRoot "/var/www"
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
<Directory "/var/www">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<FilesMatch "^.ht">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
Gruß, John
Hallo John,
Unter Debian funktioniert es weder so wie da oben noch so:
RewriteBase /var/www/
Kommentiere die Zeile mal aus! Ansonsten ist auf den ersten Blick nichts auffälliges zu sehen. Daher solltest Du, wenn es daran nicht liegt, Dein Problem ausführlich erklären. Das schließt die Versionsnummern der Webserver, Error-Logs und eine Beschreibung, was im Browser sichtbar ist, ein.
RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)?$ index.php?p=$1&id=$2&a=$3&b=$4&c=$5&d=$6
RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?$ index.php?p=$1&id=$2&a=$3&b=$4&c=$5&d=$6
Noch etwas prinzipielles:
PHP hat über die Variable $_SERVER['REQUEST_URI']
Zugriff auf den ursprünglich angefragten Pfad. Es ist die einfachste und portabelste Art, relevante Angaben aus dem Pfad vom PHP-Script selbst extrahieren zu lassen.
Gruß aus Berlin!
eddi
Kommentiere die Zeile mal aus! Ansonsten ist auf den ersten Blick nichts auffälliges zu sehen. Daher solltest Du, wenn es daran nicht liegt, Dein Problem ausführlich erklären. Das schließt die Versionsnummern der Webserver, Error-Logs und eine Beschreibung, was im Browser sichtbar ist, ein.
Apache HTTP Server Version 2.2
PHP 5.2.11
Im Browser wird nur die Startseite geladen und auch nur durch "/"
sprich http://domain/
gebe ich http://domain/index.php ein, wirft er nur ne weiße Seite aus!
RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)?$ index.php?p=$1&id=$2&a=$3&b=$4&c=$5&d=$6
RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?$ index.php?p=$1&id=$2&a=$3&b=$4&c=$5&d=$6Noch etwas prinzipielles:
PHP hat über die Variable
$_SERVER['REQUEST_URI']
Zugriff auf den ursprünglich angefragten Pfad. Es ist die einfachste und portabelste Art, relevante Angaben aus dem Pfad vom PHP-Script selbst extrahieren zu lassen.
Genau das wird auch gemacht.
Die Zeilen oben sorgen nur für ne schöne URL.
Ausgewertet wird das ganze dann über REQUEST_URI .. explode.. "/"...
Gruß, John
Wenn ich: http://domain/foo/
eingebe
Aus dem Error-Log:
[Thu Oct 22 23:08:18 2009] [error] [client 91.57.205.122] File does not exist: /var/www/foo, referer: http://domain/
Re:
Apache HTTP Server Version 2.2
Das ist die Major Version; die ganze Version bitte!
RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)?$ index.php?p=$1&id=$2&a=$3&b=$4&c=$5&d=$6
RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?$ index.php?p=$1&id=$2&a=$3&b=$4&c=$5&d=$6Noch etwas prinzipielles:
PHP hat über die Variable
$_SERVER['REQUEST_URI']
Zugriff auf den ursprünglich angefragten Pfad. Es ist die einfachste und portabelste Art, relevante Angaben aus dem Pfad vom PHP-Script selbst extrahieren zu lassen.Genau das wird auch gemacht.
Die Zeilen oben sorgen nur für ne schöne URL.
Ausgewertet wird das ganze dann über REQUEST_URI .. explode.. "/"
Fein; warum machst Du dann einen over head, indem Du unnötig GET-Daten produzierst?
AddCharset utf-8 .css .php .js
AddDefaultCharset utf-8
DirectoryIndex index.php
ErrorDocument 404 /404-Fehler/
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteRule !^index.php$ index.php [L,QSA]
Gruß aus Berlin!
eddi
Apache HTTP Server Version 2.2.14
AddCharset utf-8 .css .php .js
AddDefaultCharset utf-8
DirectoryIndex index.php
ErrorDocument 404 /404-Fehler/RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteRule !^index.php$ index.php [L,QSA]
Das funktioniert so nicht!
Er findet so nicht mal mehr die Stylesheet-Datei.
Re:
Das funktioniert so nicht!
Er findet so nicht mal mehr die Stylesheet-Datei.
Wie oben zu lesen war, müsste dabei alles über die index.php geregelt werden. Wenn Du das nicht willst, solltest Du schreiben, was Du willst! Darüber hinaus erwarte ich auch, dass Du mal ins Manual siehst, um die skizzierte Hilfe, wenn nicht an die eigenen, ungenannten Wünsche anzupassen, zumindest nachzuvollziehen. RewriteCond bietet Möglichkeiten zu testen, ob eine Datei tatsächlich existiert.
Es ist an Dir, Dein Vorstellungen so zu konkretisieren, dass man Dir auch helfen kann - nicht an mir so lange zu raten, bis es für Dich funktioniert.
Gruß aus Berlin!
eddi
Hey sorry Eddi du hast Recht.
Also.
Das System ist im Moment so aufgebaut das eine URL:
http://example.com/Klassenname/Methodenname/Parameter1/Parameter2/Parameter3
lautet.
Es ist ein MVC Pattern und der Dispatcher sorgt dafür das REQUEST_URI per explode() (PHP) getrennt wird. Dementsprechend wird die passende Klasse includiert und die passende Methode mit den gegebenen Parametern aufgerufen.
Die File Struktur sieht halt so aus:
/
/Controller
/Model
/View
FrontController/Dispatcher & Co. sind in der index.php untergebracht. Hatte sie in eigenen Dateien untergebracht aber wollte dem Server das inkludieren ersparen.
Bisher hatte ich einen Webspace bei Bplaced.net und hier auf meinem Rechner lief XAMPP. Diese .htaccess Datei funktioniert jetzt aber komischerweise nicht auf meinem neuen Root-Server (Debian, Lenny).
Dort habe ich PHP installiert mit Apache2 - jeweils die aktuellste Version!
Ich frage mich also - warum?
Komisch ist, das wenn ich die normale URL ohne Parameter aufrufe, sprich http://example.com/ die index.php zu Gesicht bekomme. Wenn ich aber http://example.com/index.php eingebe - weiße Seite.
Gebe ich z.B. http://example.com/Klassenname/Methodenname/Parameter1/ ein, dann findet er die Seite nicht (404 Not Found).
=/ Hoffe du kannst mir jetzt besser helfen.
Beste Grüße,
John
Re:
http://example.com/Klassenname/Methodenname/Parameter1/Parameter2/Parameter3
...
Die File Struktur sieht halt so aus:
/
/Controller
/Model
/View
Wo sind Dateien wie Stylesheets, Javascripte und Bilder untergebracht?
Komisch ist, das wenn ich die normale URL ohne Parameter aufrufe, sprich http://example.com/ die index.php zu Gesicht bekomme. Wenn ich aber http://example.com/index.php eingebe - weiße Seite.
Da kommen wir der Sache doch schon näher: Beim Aufruf von http://example.com/ ist REQUEST_URI "/". Beim Aufruf von http://example.com/index.php ist REQUEST_URI "/index.php". Vermutlich nimmt Dein Script darauf keine entsprechende Fallunterscheidung vor. Entweder wird mangels ordentlich konfiguriertem error reporting innerhalb PHPs keine Fehlermeldung generiert, oder das Script verfährt nach Logik des Steuerflusses und gibt gar nichts aus. Denkbar wäre auch noch, dass dank fehlkonfiguriertem ErrorDocument vom Apachen nur ein HTTP-Status 404 zurückgegeben wird. Das ließe sich dann in den Logdaten des Webservers feststellen.
Gebe ich z.B. http://example.com/Klassenname/Methodenname/Parameter1/ ein, dann findet er die Seite nicht (404 Not Found).
Das lässt sich in meiner Testumgebung nicht nachvollziehen. Somit ist davon auszugehen, dass noch andere Konfigurationen wirken, die mir nicht ersichtlich sind.
Gruß aus Berlin!
eddi
Re:
http://example.com/Klassenname/Methodenname/Parameter1/Parameter2/Parameter3
...
Die File Struktur sieht halt so aus:
/
/Controller
/Model
/ViewWo sind Dateien wie Stylesheets, Javascripte und Bilder untergebracht?
/Img
/Styles
/Scripts
Komisch ist, das wenn ich die normale URL ohne Parameter aufrufe, sprich http://example.com/ die index.php zu Gesicht bekomme. Wenn ich aber http://example.com/index.php eingebe - weiße Seite.
Da kommen wir der Sache doch schon näher: Beim Aufruf von http://example.com/ ist REQUEST_URI "/". Beim Aufruf von http://example.com/index.php ist REQUEST_URI "/index.php". Vermutlich nimmt Dein Script darauf keine entsprechende Fallunterscheidung vor.
Entweder wird mangels ordentlich konfiguriertem error reporting innerhalb PHPs keine Fehlermeldung generiert,
E_STRICT | E_ALL
oder das Script verfährt nach Logik des Steuerflusses und gibt gar nichts aus. Denkbar wäre auch noch, dass dank fehlkonfiguriertem ErrorDocument vom Apachen nur ein HTTP-Status 404 zurückgegeben wird. Das ließe sich dann in den Logdaten des Webservers feststellen.
Nichts zu sehen...
Es muss an Mod_Rewrite bzw der Htaccess liegen. Bin ich mir sicher.
=/ SO ein Schei**
liebe gräße, danke für deine HIlfe
Re:
Oben ist meine Mail-Adresse. Schreib mir bitte mal eine Mail, wo ich mir das ganze ansehen kann (PHP-Code, Serverkonfiguration und .htaccess).
Gruß aus Berlin!
eddi