mod_rewrite läuft nicht...
e7
- webserver
Hi,
ich hab da mal wieder ein kleines Problem... Erst mal zur Situation: Ich hab auf meinem Rechner PHPTriad drauf - also Apache, PHP und MySQL. Apache ist 1.3.23, System auf dem ich normalerweise mit Apache rumwerkle ist Win2k...
Jetzt hab ich ein kleines Projekt, welches mir schön anzusehende URLs mit /forum/ etc. kreirt, läuft soweit auch ganz gut - aber nur auf dem Server, auf dem's am Ende läuft. Lokal bei mir läuft das leider nicht; da kein mod_rewrite aktiviert ist. Bisher ging das immer recht gut mit ein bisschen str_replace() und einer Hilfsdatei die dann über header("Location: xyz"); das ganze weiterleitet...
<?
ob_start();
?><html>
<a href="/forum/">Forum</a>
</html>
<?
$out = ob_get_contents();
ob_end_clean();
$out = str_replace('href="', 'href="umleitung.php?', $out);
echo $out;
?>
und in der umleitung.php hab ich dann selbst das mod_rewrite durchgeführt (wieder sehr vereinfacht):
$a = explode("/", $QUERY_STRING);
switch ($a[0]) {
case 'forum':
$f_to = "id=forum&forum=${a[1]}&thread=${a[2]}";
break;
}
header("Location: http://localhost/index.php?$f_to");
die();
Soweit hat das auch ganz gut funktioniert - bis ich heute das Forum mal wieder testen wollte, sprich einen Eintrag schreiben - und wie ihr euch vorstellen könnt, gehen durch die Weiterleitung die POST-Daten flöten :-(
Also hab ich den Code jetzt erst mal rausgenommen, und mod_rewrite aktiviert... In der httpd.conf hab ich die auskommentierten Zeilen einkommentiert:
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
AllowOverride hab ich nachdems normal nicht ging an allen interessanten Stellen auf all gesetzt - und geht immer noch nicht... Es kommt immer die Meldung:
Not Found
The requested URL /forum/ was not found on this server.
Apache/1.3.23 Server at localhost Port 80
In der Error-Log steht auch nur das:
[Sat Jul 30 21:59:01 2005] [error] [client 127.0.0.1] File does not exist: c:/apache/htdocs/forum/
Meine .htaccess enthält das ensprechende RewriteEngine on und die Regeln, und die müssen passen, da diese auf dem Server im Internet ausgeführt werden...
Was also will dieser Apache noch von mir, dass er meine Rewrites durchführt?
Schon mal vielen Dank im Voraus...
E7
Hallo e7,
...
header("Location: http://localhost/index.php?$f_to");
...
Apache/1.3.23 Server at localhost Port 80
...
[Sat Jul 30 21:59:01 2005] [error] [client 127.0.0.1] File does not exist: c:/apache/htdocs/forum/
dein Server ist ein Windows-Server? Oder hast du eine ssh-sitzung zum server und probierst dein Ding mit sowas wie lynx aus...!? Ansonsten kommst du mit "localhost" zu der loopback-Ip 127.0.0.1, was dann zu deinem heimischen Rechner führt.
Grüße,
Sven
Hi,
dein Server ist ein Windows-Server? Oder hast du eine ssh-sitzung zum server und probierst dein Ding mit sowas wie lynx aus...!? Ansonsten kommst du mit "localhost" zu der loopback-Ip 127.0.0.1, was dann zu deinem heimischen Rechner führt.
das ganze ist ein Server, den ich mir lokal installiert habe... Nennt sich PHPTriad und macht das für mich (also Einrichtung von PHP etc.)... Ist auf meinem Rechner drauf und ich greif mit SeaMonkey darauf zu, ganz unspektakulär.
E7
Hallo e7,
dein Server ist ein Windows-Server? Oder hast du eine ssh-sitzung zum server und probierst dein Ding mit sowas wie lynx aus...!? Ansonsten kommst du mit "localhost" zu der loopback-Ip 127.0.0.1, was dann zu deinem heimischen Rechner führt.
das ganze ist ein Server, den ich mir lokal installiert habe... Nennt sich PHPTriad und macht das für mich (also Einrichtung von PHP etc.)... Ist auf meinem Rechner drauf und ich greif mit SeaMonkey darauf zu, ganz unspektakulär.
ok, aber ich dachte, die Fehler kämen, als du das ganze auf deinem "zukünftigen" (web)server getestet hast?
Ansonsten: hast du vielleicht an der Konfiguration falsch rumgefummelt? ;)
Grüße,
Sven
Hi,
ok, aber ich dachte, die Fehler kämen, als du das ganze auf deinem "zukünftigen" (web)server getestet hast?
Ansonsten: hast du vielleicht an der Konfiguration falsch rumgefummelt? ;)
ich hab nur die # vor den entsprechenden Zeilen raus, damit sollte es ja eigentlich aktiviert werden???
Auf dem Webserver funktioniert's ja, nur lokal geht's nicht, bisher hatte ich den Workaround brauche jetzt aber POST :(
E7
hallo e7,
ich hab da mal wieder ein kleines Problem...
"mal wieder"? Ich kann mich nicht erinnern, daß du schonmal Probleme hattest, jedenfalls keine kleinen *SCNR*
Erst mal zur Situation: Ich hab auf meinem Rechner PHPTriad drauf - also Apache, PHP und MySQL. Apache ist 1.3.23, System auf dem ich normalerweise mit Apache rumwerkle ist Win2k...
Da gehts schon los: ich habe keine Ahnung, ob (und wenn ja, was für eins) PHPTriad ein "bundle" ist und nicht vielleicht noch irgendwas dazugehört, was dir dazwischenfunken könnte. Und du bist sicher, daß du da wirklich einen uralten Apache 1.3.23 dabei hast? Warum nimmst du den, anstelle eines geringfügig moderneren?
Bisher ging das immer recht gut mit ein bisschen str_replace()
<?
ob_start();
Ähm, ja. Es ist anzunehmen, daß das PHP ist Damit das funktioniert, muß in deiner Apache-Konfiguration eingestellt sein, daß "ASP-tags" berücksichtigt werden sollen. Der Rest deines Scripts sieht nach flüchtigem Durchmustern ordentlich aus, probiert hab ichs aber nicht.
und in der umleitung.php hab ich dann selbst das mod_rewrite durchgeführt
Soweit hat das auch ganz gut funktioniert
Mir ist immer etwas unwohl, wenn man mit PHP Aufgaben löst, die Aufgaben des Webservers sind und sich auch ohne PHP in der httpd.conf lösen ließen. Das ändert nichts daran, daß dein Weg durchaus Erfolg bringen kann.
In der httpd.conf hab ich die auskommentierten Zeilen einkommentiert:
LoadModule rewrite_module modules/mod_rewrite.so
Schwer verständlich, wieso das vorher "auskommentiert" war
AddModule mod_rewrite.c
ups ... achso, ja, ist ja ein apache-Oldie ...
AllowOverride hab ich nachdems normal nicht ging an allen interessanten Stellen auf all gesetzt - und geht immer noch nicht... Es kommt immer die Meldung:
Not Found
Was mit AllowOverride nun wirklich nichts zu tun hat. Für deinen lokalen Server, auf dessen zentrale Konfiguration du ja uneingeschränkten Zugriff hast, ist in diesem Fall AllowOverride auch einigermaßen uninteressant.
The requested URL /forum/ was not found on this server.
Interessant. Genau an _dieser Stelle_ solltest du zu überlegen anfangen. "/forum" ist beispielsweise im strengen Sinn keine URL, aber ein Pfad, der zur DocumentRoot führen soll. Ändere das mal in eine absolute URL um.
Was also will dieser Apache noch von mir, dass er meine Rewrites durchführt?
Möglicherweise will er als ein Apache behandelt werden, der auf einer Windows-Kiste schuftet.
Was mich verwirrt ist der Einsatz einer .htaccess auf deiner lokalen Kiste. Probiere deine "rules" erstmal in der httpd.conf durch, dann weißt du auch, welche Werte in einer .htaccess berücksichtigt werden möchten.
Grüße aus Berlin
Christoph S.
Hallo,
Ähm, ja. Es ist anzunehmen, daß das PHP ist Damit das funktioniert, muß in deiner Apache-Konfiguration eingestellt sein, daß "ASP-tags" berücksichtigt werden sollen.
ich dachte immer, dass das SHORT-Tags wären, ich glaub ich sollte noch mal im PHP manual lesen :-(
mfg
Twilo
hallo Twilo,
ich glaub ich sollte noch mal im PHP manual lesen :-(
Nö, in diesem Fall solltest du die Kommentare in deiner php.ini lesen.
Grüße aus Berlin
Christoph S.
Hi Christoph,
<?
... muß in deiner Apache-Konfiguration eingestellt sein, daß "ASP-tags"
berücksichtigt werden sollen ...
Apache Konfiguration != PHP Konfiguration
ich glaub ich sollte noch mal im PHP manual lesen :-(
Nö, in diesem Fall solltest du die Kommentare in deiner php.ini lesen.
Gesagt, getan:
; Allow the <? tag. Otherwise, only <?php and <script> tags are recognized.
; NOTE: Using short tags should be avoided when developing applications or
; libraries that are meant for redistribution, or deployment on PHP
; servers which are not under your control, because short tags may not
; be supported on the target server. For portable, redistributable code,
; be sure not to use short tags.
short_open_tag = On
; Allow ASP-style <% %> tags.
asp_tags = On
Es handelt sich hierbei um meine php.ini Datei für PHP 5 unter Windows XP.
Daraus lässt sich ganz klar schließen, dass es sich bei <? um Short Tags
und bei <%, sowie %> un ASP-style Tags handelt.
MfG, Dennis.
Hallo,
Es handelt sich hierbei um meine php.ini Datei für PHP 5 unter Windows XP.
Daraus lässt sich ganz klar schließen, dass es sich bei <? um Short Tags
und bei <%, sowie %> un ASP-style Tags handelt.
bei php 4.3.x ist es identisch :-)
mfg
Twilo
Hi,
Da gehts schon los: ich habe keine Ahnung, ob (und wenn ja, was für eins) PHPTriad ein "bundle" ist und nicht vielleicht noch irgendwas dazugehört,
EIn simples Bundle mit Apache, MySQL und PHP... Wie EasyPHP oder solche Pakete auch...
Und du bist sicher, daß du da wirklich einen uralten Apache 1.3.23 dabei hast?
Ja, zeigt er an wenn er gestartet ist...
Warum nimmst du den, anstelle eines geringfügig moderneren?
Weil ich keine Lust habe meinen Apache komplett per Hand einzurichten, dann PHP und dann die Datenbank... Früher ging die Version doch auch ;) Und da der Apache auf meinem lokalen Rechner läuft und durch ne Firewall vom Netz abgeschottet ist, sollten sich Sicherheitslücken auch nicht bemerkbar machen...
Der Rest deines Scripts sieht nach flüchtigem Durchmustern ordentlich aus, probiert hab ichs aber nicht.
Ich auch nicht, das ist ne grobe Zusammenfassung meiner Dateien, sollte aber laufen, zumindest das Prinzip verdeutlichen.
Mir ist immer etwas unwohl, wenn man mit PHP Aufgaben löst, die Aufgaben des Webservers sind und sich auch ohne PHP in der httpd.conf lösen ließen.
Online ist das so, da verwende ich dafür kein PHP, es war lediglich weil das mod_rewrite noch nie lokal funktioniert hat. Aber genau aus dem Grund wollte ich es ja aktivieren ;-)
Das ändert nichts daran, daß dein Weg durchaus Erfolg bringen kann.
Bis auf das Problem mit POST hat's ja auch geklappt
The requested URL /forum/ was not found on this server.
Interessant. Genau an _dieser Stelle_ solltest du zu überlegen anfangen. "/forum" ist beispielsweise im strengen Sinn keine URL, aber ein Pfad, der zur DocumentRoot führen soll. Ändere das mal in eine absolute URL um.
Hä? Ich verlinke darauf mit <a href="/forum/">Forum</a>, das wird dann auf index.php?id=forum rewrited.
Was mich verwirrt ist der Einsatz einer .htaccess auf deiner lokalen Kiste.
brauch ich ja, weil ich genau die gleiche .htaccess auch auf dem Server im Netz brauche...
Probiere deine "rules" erstmal in der httpd.conf durch, dann weißt du auch, welche Werte in einer .htaccess berücksichtigt werden möchten.
... und im Netz hab ich darauf keinen Zugriff... Ich kann ja mal die RewriteRules alle kopieren
E7
Hi,
Probiere deine "rules" erstmal in der httpd.conf durch, dann weißt du auch, welche Werte in einer .htaccess berücksichtigt werden möchten.
hab ich ausprobiert, passiert gar nix :-( Außer wenn ich auf /forum/ gehe:
Bad Request
Your browser sent a request that this server could not understand.
Apache/1.3.23 Server at localhost Port 80
??? Alles andere funktioniert, also auch /_old/ (Verzeichnis für meine alten Dinge die ich nie wieder anschaue) - ich kann mir nicht vorstellen, dass SeaMonkey hier zwischen /_old/ und /forum/ so einen unterschiedlichen Request sendet??? Ich hab die Rewrites aus der httpd.conf wieder raus, aber es ändert sich nix *g*
E7
Hallo e7.
Ich hab die Rewrites aus der httpd.conf wieder raus, aber es ändert sich nix *g*
Ich weiß nicht, ob es an der Wärme liegt, dass ich auf dem Schlauch stehe, aber: Wo sind deine RewriteRules?
Einen schönen Sonntag noch.
Gruß, Ashura
Hi,
Ich weiß nicht, ob es an der Wärme liegt, dass ich auf dem Schlauch stehe, aber: Wo sind deine RewriteRules?
in der .htaccess in htdocs/... In der httpd.conf waren sie nur kurz, wiel Christoph mir das empfohlen hatte zu testen...
E7
Hallo e7.
Ich weiß nicht, ob es an der Wärme liegt, dass ich auf dem Schlauch stehe, aber: Wo sind deine RewriteRules?
in der .htaccess in htdocs/... In der httpd.conf waren sie nur kurz, wiel Christoph mir das empfohlen hatte zu testen...
*g* Das meinte ich nicht.
Wie lauten sie?
Einen schönen Sonntag noch.
Gruß, Ashura
Hi,
*g* Das meinte ich nicht.
Wie lauten sie?
ach so...
RewriteEngine on
#RewriteRule ^index/(.*).htm$ index.php?id=$1
RewriteRule ^unseregruppen/([-_0-9a-zA-Z]*).*$ index.php?id=unseregruppen&gruppe=$1
RewriteRule ^unseregruppen.*$ index.php?id=unseregruppen
RewriteRule ^forum/([0-9]*)/neuerthread.*$ index.php?id=forum&forum=$1&action=new
RewriteRule ^forum/([0-9]*)/([0-9]*).*$ index.php?id=forum&forum=$1&thread=$2
RewriteRule ^forum/([0-9]*)/go([0-9]*).*$ index.php?id=forum&forum=$1&start=$2
RewriteRule ^forum/([0-9]*).*$ index.php?id=forum&forum=$1
RewriteRule ^forum.*$ index.php?id=forum
RewriteRule ^termine.*$ index.php?id=termine
RewriteRule ^seelsorge.*$ index.php?id=seelsorge
RewriteRule ^impressum.*$ index.php?id=impressum
RewriteRule ^ueberuns.*$ index.php?id=ueberuns
RewriteRule ^gaestebuch.*$ index.php?id=gaestebuch
RewriteRule ^links.*$ index.php?id=links
RewriteRule ^xuglaho.*$ index.php?id=xuglaho
Wunder dich aber bitte nicht, ich hab von regulären Ausdrücken keine Ahnung ;-)
RewriteBase /
bringt's übrigens auch nicht, hab ich auch schon probiert.
Die Regeln an sich müssen aber passen, da die funktionieren Klick!
E7
Hallo e7.
Hi,
*g* Das meinte ich nicht.
Wie lauten sie?ach so...
RewriteEngine on
#RewriteRule ^index/(.).htm$ index.php?id=$1
RewriteRule ^unseregruppen/([-_0-9a-zA-Z]).$ index.php?id=unseregruppen&gruppe=$1
RewriteRule ^unseregruppen.$ index.php?id=unseregruppen
RewriteRule ^forum/([0-9])/neuerthread.$ index.php?id=forum&forum=$1&action=new
RewriteRule ^forum/([0-9])/([0-9]).$ index.php?id=forum&forum=$1&thread=$2
RewriteRule ^forum/([0-9])/go([0-9]).$ index.php?id=forum&forum=$1&start=$2
RewriteRule ^forum/([0-9]).$ index.php?id=forum&forum=$1
RewriteRule ^forum.$ index.php?id=forum
RewriteRule ^termine.$ index.php?id=termine
RewriteRule ^seelsorge.$ index.php?id=seelsorge
RewriteRule ^impressum.$ index.php?id=impressum
RewriteRule ^ueberuns.$ index.php?id=ueberuns
RewriteRule ^gaestebuch.$ index.php?id=gaestebuch
RewriteRule ^links.$ index.php?id=links
RewriteRule ^xuglaho.$ index.php?id=xuglaho
>
> Wunder dich aber bitte nicht, ich hab von regulären Ausdrücken keine Ahnung ;-)
Wie kommst du dann zu diesen Rules?
Sie zu erlernen ist gar nicht so schwer: [PCRE Evaluator: Was sind RegExp?](http://pcre.nophia.de/explain/index.php)
Sie ließen sich stark vereinfachen:
~~~apache
RewriteEngine on
#RewriteRule ^index/(.*)\.htm$ index.php?id=$1
RewriteRule ^(\w+).*$ index.php?id=$1
# ^^Wozu brauchst du das hier überhaupt?
RewriteRule ^unseregruppen/([-_0-9a-zA-Z]*).*$ index.php?id=unseregruppen&gruppe=$1
RewriteRule ^forum/([0-9]*)/neuerthread.*$ index.php?id=forum&forum=$1&action=new
RewriteRule ^forum/([0-9]*)/([0-9]*).*$ index.php?id=forum&forum=$1&thread=$2
RewriteRule ^forum/([0-9]*)/go([0-9]*).*$ index.php?id=forum&forum=$1&start=$2
RewriteRule ^forum/([0-9]*).*$ index.php?id=forum&forum=$1
(Ohne Gewähr versteht sich.)
Die Regeln an sich müssen aber passen, da die funktionieren Klick!
Ja, /forum/ ist offenbar erreichbar, als liegt auf jeden Fall ein lokales Problem vor, wenn es lokal nicht funktioniert. (Ich hab's heute mit der Logik.)
Einen schönen Sonntag noch.
Gruß, Ashura
Hi,
Wie kommst du dann zu diesen Rules?
Copy&Paste, immer nur kleine Änderungen...
Sie zu erlernen ist gar nicht so schwer: PCRE Evaluator: Was sind RegExp?
Sieht ganz nett aus, werd ich mir bei Gelegenheit durchlesen...
RewriteRule ^(\w+).*$ index.php?id=$1
sperrt der mir dann nicht den Zugriff auf die Unterverzeichnisse, wenn dann beispielsweise ein Verzeichnis abc da ist?
RewriteRule ^(\w+).*$ index.php?id=$1
# ^^Wozu brauchst du das hier überhaupt?
Wenn jemand einen abschließenden / schreibt, oder .htm is auch ganz nett wenn das geht...
Ja, /forum/ ist offenbar erreichbar, als liegt auf jeden Fall ein lokales Problem vor, wenn es lokal nicht funktioniert. (Ich hab's heute mit der Logik.)
genau danach such ich ja verzweifelt :-(
E7
Hallo e7.
Sie zu erlernen ist gar nicht so schwer: PCRE Evaluator: Was sind RegExp?
Sieht ganz nett aus, werd ich mir bei Gelegenheit durchlesen...
Eine weise Entscheidung.
RewriteRule ^(\w+).*$ index.php?id=$1
sperrt der mir dann nicht den Zugriff auf die Unterverzeichnisse, wenn dann beispielsweise ein Verzeichnis abc da ist?
Nein, warum?
Ich zitiere:
„[...] \w steht für alle Wortzeichen, also Buchstaben, Ziffern und Unterstriche, [...]“
RewriteRule ^(\w+).*$ index.php?id=$1
# ^^Wozu brauchst du das hier überhaupt?Wenn jemand einen abschließenden / schreibt, oder .htm is auch ganz nett wenn das geht...
Aha, DAU-kompatibel? ;-)
Einen schönen Sonntag noch.
Gruß, Ashura
Hi,
Wenn jemand einen abschließenden / schreibt, oder .htm is auch ganz nett wenn das geht...
Aha, DAU-kompatibel? ;-)
ja... Den abschließenden / schreib ich selbst auch gerne hin, sieht irgendwie netter aus... Allerdings killt die MSN-Suche gnadenlos abschließende Backslashes...
E7
Hallo e7.
ja... Den abschließenden / schreib ich selbst auch gerne hin, sieht irgendwie netter aus... Allerdings killt die MSN-Suche gnadenlos abschließende Backslashes...
Nunja:
/Foo != /Foo/
Du verstehst?
Einen schönen Sonntag noch.
Gruß, Ashura
Hi,
/Foo != /Foo/
Du verstehst?
Ja. Deshalb versteh ich auch nicht, warum Microsoft hier mal wieder eigenständige Veränderungen vornimmt. Ich verlinke auf /forum/, Microsoft meint aber /forum...
Und Google weigert sich, die neuen Formen aufzunehmen, die murksen noch mit der alten Variante rum (index.php?id=...) und verlinkt auf Seiten, die nie existiert haben; zumindest nicht in diesem Verzeichnis...
Suchmaschinen - ein ewiges Rätsel.
Einen schönen Sonntag noch.
Eine schöne Woche noch... Bin ab morgen weg, also wunder dich nicht wenn ich nicht mehr zum Antworten komme... Woll ich nur sicherheitshalber mal gesagt haben *g*
E7
Hallo e7.
Ja. Deshalb versteh ich auch nicht, warum Microsoft hier mal wieder eigenständige Veränderungen vornimmt. Ich verlinke auf /forum/, Microsoft meint aber /forum...
Du hast dir die Erklärung soeben selbst geliefert: Microsoft. ;-)
Und Google weigert sich, die neuen Formen aufzunehmen, die murksen noch mit der alten Variante rum (index.php?id=...) und verlinkt auf Seiten, die nie existiert haben; zumindest nicht in diesem Verzeichnis...
Ja ich weiß. Google ist so was von lahmarschig, dass bei mir sogar noch die Uralt-Seiten aufgelistet werden.
Aber ich habe mich mittlerweile damit abgefunden, dass Google ihren Index offenbar verkommen lassen, nur um mit großen Zahlen (momentan 8.058.044.651) protzen zu können.
Suchmaschinen - ein ewiges Rätsel.
ACK.
Bin ab morgen weg, also wunder dich nicht wenn ich nicht mehr zum Antworten komme... Woll ich nur sicherheitshalber mal gesagt haben *g*
Alles klar, danke dass du mich informierst. :-)
Einen schönen Sonntag noch.
Gruß, Ashura