problem bei rewrite rule in htaccess
sascha
- webserver
hallo,
ich hab ein kleines problem beim htaccess!
folgendes steht in der htaccess
----------------------------------
RewriteEngine on
Options FollowSymLinks
RewriteRule ^http://www.domain1.de/meldung_(.*).html$ http://www.domain2.de/cgi-bin/baseportal.pl?htx=/meldung&Id==$1 [NC] [L]
----------------------------------
www.domain1.de/meldung_5.html eingebe soll daraus folgender link werden:
http://www.domain2.de/cgi-bin/baseportal.pl?htx=/meldung&Id==5
ich bekomme aber immer ne 404-fehlerseite.
hat hier denn jemand einen tipp für mich?
danke
sascha
Hellihello
hat hier denn jemand einen tipp für mich?
probiers doch erstmal ohne parameter. Zudem steht da ein "==" in den Get-Paramtern, weiß nicht, ob das stört.
Ist dein pl-script denn sonst aufrufbar (richtige Rechte?)
Dank und Gruß,
frankx
hallo frankx,
das script ist ganz normal aufrufbar.
redirects klappen auch ganz normal, z.b.
Redirect /index.html /cgi-bin/baseportal.pl?htx=/home
an dem == lags auch nicht
wenn ich aus dem www.domain1.de/meldung_5.html
ein
www.domain2.de/cgi-bin/baseportal.pl?htx=//meldung&Id=5
mache, klappt der aufruf auch korrekt.
:-(
sascha
Hellihello
hat hier denn jemand einen tipp für mich?
probiers doch erstmal ohne parameter. Zudem steht da ein "==" in den Get-Paramtern, weiß nicht, ob das stört.
Ist dein pl-script denn sonst aufrufbar (richtige Rechte?)
Dank und Gruß,
frankx
www.domain1.de/meldung_5.html eingebe soll daraus folgender link werden:
http://www.domain2.de/cgi-bin/baseportal.pl?htx=/meldung&Id==5
Dein Parameter namens Id hat den Wert '=5', hast du das im Script bedacht?
ich bekomme aber immer ne 404-fehlerseite.
Klingt so, als ob die Umleitung funktioniert. Was ergibt im Perlscript die Abfrage nach Id? Was steht im Errorlog?
Siechfred
wenn ich das script bzw. die seite http://www.domain2.de/cgi-bin/baseportal.pl?htx=/meldung&Id==5
direkt aufrufe komme ich ans ziel.
nur der direkte aufruf http://www.domain1.de/meldung_5.html
wird nicht umgeleitet.
im log steht:
[11/Sep/2007:15:43:58 +0200] "GET /meldung_5.html HTTP/1.1" 404 505 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3"
gruß
sascha
www.domain1.de/meldung_5.html eingebe soll daraus folgender link werden:
http://www.domain2.de/cgi-bin/baseportal.pl?htx=/meldung&Id==5Dein Parameter namens Id hat den Wert '=5', hast du das im Script bedacht?
ich bekomme aber immer ne 404-fehlerseite.
Klingt so, als ob die Umleitung funktioniert. Was ergibt im Perlscript die Abfrage nach Id? Was steht im Errorlog?
Siechfred
im log steht:
[11/Sep/2007:15:43:58 +0200] "GET /meldung_5.html HTTP/1.1" 404 505 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3"
Aha, dann habe ich falsch gelegen und deine RewriteRule greift nicht. Was ich übersehen habe ist der Standardwert für RewriteBase, und das ist der physische Verzeichnispfad. Dieser ist relativ zu dem Verzeichnis, in dem sich die .htaccess befindet. Daher matcht deine Regel:
RewriteRule ^http://www.example.de/meldung_(.*).html$ http://www.example2.de/cgi-bin/baseportal.pl?htx=/meldung&Id==$1 [NC] [L]
auf folgenden Pfad:
http://www.example.de/http://www.example.de/meldung_5.html
sofern die htaccess im Dokumentenverzeichnis liegt. Das ist natürlich nicht das gewünschte Ergebnis. Deine korrigierte Regel müsste so aussehen:
RewriteRule ^meldung_[0-9]+.html$ http://www.example2.de/cgi-bin/baseportal.pl?htx=/meldung&Id==$1 [R,L]
Da du nur Zahlen durchlassen willst, solltest du den RegExp entsprechend einschränken, der Quantifier '*' heißt kein oder mehrmals, besser wäre m.E. '+'. Den Punkt im Dateinamen musst du maskieren, da er in einem RegExp eine besondere Bedeutung hat (Zeichenklasse "alle Zeichen"). Das NC-Flag brauchst du nicht, da Zahlen nicht case-sensitive sind, und du solltest ggf. einen Redirect ausführen (R-Flag).
Siechfred
hallo siechfred,
many many many thanx - jetzt hab ich`s!!
DANKE
sascha
----------------------------------------------
RewriteRule ^meldung_([1-9][0-9]*).html$ http://www.domain2.de/cgi-bin/baseportal.pl?htx=/meldung&Id==$1 [R,L]
----------------------------------------------
im log steht:
[11/Sep/2007:15:43:58 +0200] "GET /meldung_5.html HTTP/1.1" 404 505 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3"Aha, dann habe ich falsch gelegen und deine RewriteRule greift nicht. Was ich übersehen habe ist der Standardwert für RewriteBase, und das ist der physische Verzeichnispfad. Dieser ist relativ zu dem Verzeichnis, in dem sich die .htaccess befindet. Daher matcht deine Regel:
RewriteRule ^http://www.example.de/meldung_(.*).html$ http://www.example2.de/cgi-bin/baseportal.pl?htx=/meldung&Id==$1 [NC] [L]
auf folgenden Pfad:
http://www.example.de/http://www.example.de/meldung_5.html
sofern die htaccess im Dokumentenverzeichnis liegt. Das ist natürlich nicht das gewünschte Ergebnis. Deine korrigierte Regel müsste so aussehen:
RewriteRule ^meldung_[0-9]+.html$ http://www.example2.de/cgi-bin/baseportal.pl?htx=/meldung&Id==$1 [R,L]
Da du nur Zahlen durchlassen willst, solltest du den RegExp entsprechend einschränken, der Quantifier '*' heißt kein oder mehrmals, besser wäre m.E. '+'. Den Punkt im Dateinamen musst du maskieren, da er in einem RegExp eine besondere Bedeutung hat (Zeichenklasse "alle Zeichen"). Das NC-Flag brauchst du nicht, da Zahlen nicht case-sensitive sind, und du solltest ggf. einen Redirect ausführen (R-Flag).
Siechfred
hallo,
was ich übersehen hatte, ist eine blätterfunktion.
hier muß man 2 werte übergeben. hab schon einiges gelesen, komme hier aber auch nicht so richtig weiter..
hier mein perl mit der blätterfunktion.
der weiterlink ist so wie es momentan ist.
<perl>
$range=$_get{range}||"0,6";
$Rubrik||="$Rubrik";
get "Rubrik==Fotos online==1 range=$range", "fotos";
#------------------------------------------------
out "<table cellpadding='0' cellspacing='0' border='0' width='420' valign='top' style='margin-left:5px; margin-right:5px;'>";
while(get_next(fotos))
{
$counter++;
<left>;
if($counter%3==0){$trenner = "<tr>";
}
else{$trenner = "";
}
$rubrik_html = convert_html($Rubrik);
out "<td valign=top width='210'><div class=text style='margin-left:5px; margin-top:3px; margin-right:15px; margin-bottom:3px;'>
<a href='....'><img src='/bp-files/$Foto' width='120' style='border:solid 1px #666666'></a>
</td><td></td>$trenner";
}
my $newrange=$_range+$_range_length;
my $oldrange=$_range-$_range_length;
$oldrange=0 if $oldrange<0 && $oldrange>-$_range_length;
out "<a href=\http://www.domain2.de/zuruck.html><b>| zurück blättern |</b> </a>" if $oldrange>=0;
out "<a href="/cgi-bin/baseportal.pl?htx=//fotos&Rubrik==$Rubrik&range=$newrange,$_range_length">weiter blättern |</b></a>" if $newrange<$_amount_query;
</perl>
---------------------------------------------------------
das habe ich dafür in der htaccess:
RewriteRule ^zuruck_(.*)_/?(.*).html$ http://www.domain1.de/cgi-bin/baseportal.pl?htx=/fotos&Rubrik==$Rubrik&range=$1,$2 [NC] [L]
ich weiß, ich geh vermutlich echt auf die nerven - sorry.
sascha
was ich übersehen hatte, ist eine blätterfunktion.
Jaja, der Eifer des Gefechts ;)
hier muß man 2 werte übergeben. hab schon einiges gelesen, komme hier aber auch nicht so richtig weiter..
Frage: Wie sollen die URLs aussehen, die du umschreiben willst?
hier mein perl mit der blätterfunktion.
Du solltest dich dringend mit dem CGI-Modul beschäftigen zwecks Parsen der URL-Parameter und der Ausgabe von HTML. Aber das nur am Rande.
das habe ich dafür in der htaccess:
RewriteRule ^zuruck_(.*)_/?(.*).html$ http://www.domain1.de/cgi-bin/baseportal.pl?htx=/fotos&Rubrik==$Rubrik&range=$1,$2 [NC] [L]
Also wäre ein Blätterlink z.B sowas: "/zuruck_1foobar.html"? Oder wie stellst du dir das vor? Was steht im Errorlog?
Siechfred
hi,
momentan sehen die blätterlinks so aus:
http://www.doamin1.de/cgi-bin/baseportal.pl?htx=/domain1.de/galerie&Rubrik=$Rubrik&range=0,8
http://www.doamin1.de/cgi-bin/baseportal.pl?htx=/domain1.de/galerie&Rubrik=$Rubrik&range=8,8
http://www.doamin1.de/cgi-bin/baseportal.pl?htx=/domain1.de/galerie&Rubrik=$Rubrik&range=16,8
die erste zahl zegt, ab welcher pos. bilder angezeigt werden, die 2. wieviele bilder bis zum nächsten blättern.
www.domain2.de/galerie_0,8.html oder
www.domain2.de/galerie_0_8.html
auf jedenfall mit domain2.de und kürzer.
gruß
sascha
mit diesem perl-block mache ich im grunde die blätterfunktion:
<perl>
$range=$_get{range}||"0,8";
$Rubrik||="Bildergalerie";
#---------------------------
#-------------------
out "<table width=100% bgcolor=#F3EFD0><tr><td class=menu2>";
out "<table cellpadding=20>";# ab hier thumbansicht -->
get "Rubrik==!$Rubrik range=$range", "galerie";
#------------------------------------------------
out "<tr>";
while(get_next(galerie))
{
$counter++;
if($counter%4==0){$trenner = "</tr><tr>";
}
else{$trenner = "";
}
$rubrik_html = convert_html($Rubrik);
out "<td valign=bottom class='green'><a href='http://www.domain1.de/cgi-bin/baseportal.pl?htx=/domain1.de/galeriedetail&Rubrik==$rubrik_html&Id==$_id' target='_blank' class='b'><img src='http://www.domain1.de/files/$Foto' width='110' style='border:solid 2px DD9D24'></a><br>$Titel</td>$trenner";
}
out "</tr></table>";
out "</td></tr></table><center>";
#------------------------------------
my $newrange=$_range+$_range_length;
my $oldrange=$_range-$_range_length;
$oldrange=0 if $oldrange<0 && $oldrange>-$_range_length;
out " <a href="$_link&Rubrik=$_get{Rubrik}&range=$oldrange,$_range_length"class='green'>zurück</a> " if $oldrange>=0;
out " <a href="$_link&Rubrik=$_get{Rubrik}&range=$newrange,$_range_length"class='green'>weiter</a>" if $newrange<$_amount_query;
#---------------------------------
</perl>
die erste zahl zegt, ab welcher pos. bilder angezeigt werden, die 2. wieviele bilder bis zum nächsten blättern.
Okay.
www.domain2.de/galerie_0,8.html oder
www.domain2.de/galerie_0_8.html
Dann müsste sowas eigentlich funktionieren:
RewriteRule ^galerie_([0-9]+),_.html http://www .....
$1 wäre dann die Position und $2 die Anzahl. Übrigens, warum hängst du an die Links ".html" an?
$range=$_get{range}||"0,8";
$Rubrik||="Bildergalerie";
Wenn du nur eine Rubrik hast, warum übergibst du dann einen Wert? Der wäre doch m.E. überflüssig.
Siechfred
hi,
ja die rubrik ist überflüssig, stimmt!
und .html ist auch überflüssig :-)
das ist ja echt einfacher, als gedacht.
danke für die tolle unterstützung.
gruß
sascha
Hast Du mal ins error_log geschaut? Das könnte Dir Aufschluß darüber geben, welche non-existente Seite wirklich angefordert wurde...
Sonst versuche statt dem (.*) mal (0-9)...
Gruß,
Manu