htaccess hilfe
Sanni63
- apache
- htaccess
Hallo Ich brauche mal hilfe bei eine Weiterleitung über htaccess. Ich möchte wenn folgende Befehl abgefragt wird:
index.php?act=Arcade&do=newscore
Er diese weiterleitet nach
arcade_score.php?act=Arcade&do=newscore
Habe folgendes in meine htaccess eingegeben aber es funktioniert nicht. Deshalb bitte ich um Hilfe
RewriteRule ^http://www.arcade-zockerbande.de/Testboard/index.php?act=Arcade&do=newscore$ http://www.arcade-zockerbande.de/Testboard/arcade_score [R,L]
RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Hallo Sanni63,
ich werd hier echt noch zum Winnetou... Eigentlich versteh ich doch gar nichts von Apachen.
Aber ok. Soweit ich das sehe, sind da 3 Hauptprobleme:
(1) Die Rewrite-Rule findet innerhalb des Servers statt. D.h. Protokoll und Hostname gehören da nicht rein. Entferne http://www.arcade-zockerbande.de
aus der Rewrite-Rule.
Es bleibt:
RewriteRule ^/Testboard/index.php?act=Arcade&do=newscore$ /Testboard/arcade_score [R,L]
(2) Rewrite-Rules erwarten einen regulären Ausdruck, keinen Suchstring. Reguläre Ausdrücke habe eine spezielle Syntax, und bestimmte Zeichen haben Sonderbedeutung. In deinem Fall sind das der Punkt und das Fragezeichen. Ein Punkt ist ein Universalmatch, d.h. er trifft auf jedes Zeichen an dieser Stelle zu. Ein Fragezeichen ist ein "Optional" Schalter, d.h. es matcht nicht ein Fragezeichen, sondern sagt, dass der Regex-Teil links davon auch weggelassen werden kann. In diesem Fall das p von php. Du musst diese Zeichen maskieren (escapen auf gut denglisch), dafür verwendet man den Backslash .
RewriteRule ^/Testboard/index\.php\?act=Arcade&do=newscore$ /Testboard/arcade_score [R,L]
(3) Dein Rewrite ist unvollständig, oder? Sollte da nicht als Ersetzung was mit arcade_score.php?act=Arcade&do=newscore stehen?
(4) Was ist mir anderen Aufrufen? Gibt es andere Parameter für act und do? Was ist dann? Die RewriteRule greift dann nicht. Möchtest Du das vielleicht allgemeingültiger gestalten? Sowas geht.
(5) Warum machst Du einen Redirect? Das ist das R in den eckigen Klammern. Der Browser bekommt dann die Umleitung mit. Das kann Absicht sein. Ist es Absicht? Ohne das R ruft der Browser die alte Adresse auf und merkt nichts davon, dass er intern umgeleitet wurde.
Rolf
Hallo
Schon mal danke für die Tips. Ich habe das Script aus dem netz weil jemand sowas ähnliches gesucht hatte und ich gehofft habe das es damit klappt. Es gibt kein andere Parameter für act und do.
Also soll es so aussehen?
RewriteRule ^/index\.php\?act=Arcade&do=newscore$ /arcade_score.php?act=Arcade&do=newscore [R,L]
RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ -
[NC,L]
RewriteRule ^.*$ index.php [NC,L]
Hallo Sanni,
copy und paste aus dem Netz, ohne zu verstehen was man da kopiert, ist ein Patentrezept für Sicherheitslücken und Funktionsfehler.
Die Apache-Direktiven sind sehr gut dokumentiert - aber leider nicht gut übersetzt. D.h. du musst englisch können. Und Du musst natürlich erstmal ein Grundgefühl für den Apache haben, wie er tickt und wo welche Schraube sitzt.
Passt es denn nun, wenn Du die unter (1) bis (3) genannten Probleme behebst?
Rolf
Tach!
Also soll es so aussehen?
RewriteRule ^/index\.php\?act=Arcade&do=newscore$ /arcade_score.php?act=Arcade&do=newscore [R,L] RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
Sicher nicht. Jede Direktive braucht eine eigene Zeile. Das heißt, die RewriteCond stehen zwar vor der RewriteRule, für die sie wirken sollen, aber dennoch auf jeweils einer Zeile. Und die RewriteRule bekommt auch eine eigene.
dedlfix.
Hallo dedlfix,
siehste, das kommt davon wenn man kein Apatsche ist, sondern ein Duwamisch.
Aber immerhin hab ich jetzt was über RewriteCond gelernt. Es steht auf einer eigenen Zeile, man kann mehrere untereinander schreiben, die werden UND verknüpft, es sei denn man schreibt [OR] dahinter und das Ganze wirkt auf das RewriteRule in der nächsten Zeile.
Rolf
Habe es versucht anzupassen, funktioniert leider nicht.
Es sieht jetzt so aus:
RewriteRule ^/index\.php\?act=Arcade&do=newscore$ /arcade_score.php?act=Arcade&do=newscore [R,L]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ index.php [NC,L]
Hi
Ich habe es jetzt so gelöst
RewriteCond %{QUERY_STRING} ^act=Arcade&do=newscore$
RewriteCond %{REQUEST_URI} ^/index.php$
RewriteRule .* www.arcade-zockerbande.de/Testboard/arcade_score.php?act=Arcade&do=newscore [R=301,L]
Hallo Sanni,
ich habe ´jetzt eine Weile mit Winnetou die Friedenspfeife geraucht. Wenn deine .htaccess im Testboard Ordner steht und Testboard/index.php auf Testboard/arcade_score.php umgeleitet werden soll, bei unveränderten Query-Parametern, dann sollte eigentlich
RewriteRule ^index\.php$ arcade_score.php [R,NC,L]
genügen. Wenn die .htaccess im Root des Web steht, kann man dort
RewriteRule ^/Testboard/index\.php$ /Testboard/arcade_score.php [R,NC,L]
schreiben. Die Query-Parameter werden automatisch weitergereicht.
Die Angabe von www.arcade-zockerbande.de/ in der Ersetzung wird vom Apache eh entfernt, wenn du ohnehin auf diesem Host bist.
Rolf
Tach!
RewriteRule .* www.arcade-zockerbande.de/Testboard/arcade_score.php?act=Arcade&do=newscore [R=301,L]
Rewriting schreibt den Pfad in der URL - und nur diesen - um zu einem Pfad im Dateisystem. Alles andere, wie Hostname, Port oder Querystring, wird in einer RewriteRule ignoriert. Anders gesagt, alles was da als Pattern angegeben ist, wird als Pfad angesehen. Diese anderen Nicht-Pfad-Teile kann man nur mittels RewriteCond und den %{...}
-Variablen in die Auswertung einfließen lassen.
dedlfix.