Seite 1 von 2

DC Problem (ganz einfach und doch so schwierig)

Verfasst: 23.10.2006, 21:26
von Da5id
Hallo zusammen,

ich habe schon einige Treads zum Thema RewriteRules gelesen, bekomme es aber einfach nicht gebacken.

Und zwar möchte ich DC vermeiden und

index.php
index.php?index

(beide DC von /)

auf das Rootverzeichnis umleiten. Folgende RewriteRule funktioniert bei mir nicht:

RewriteRule ^index.php?index$ / [L,R=301]

Engine ist On. Andere Rules funktionieren. Was mache ich falsch?

:roll:

Verfasst:
von

Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

Verfasst: 24.10.2006, 11:07
von haha
Mit RewriteRule lassen sich die URL-Parameter nicht abfragen (steht als großer Hinweis in der RewriteRule-Anleitung, wenn auch etwas weiter unten). Du musst den Pfad mit RewriteRule prüfen und die URL-Parameter mit RewriteCond und der Variablen %{QUERY_STRING}.

Das Muster ^index.php?index$ hätte davon unabhängig mit der Zeichenkette index.php?index sowieso nicht funktioniert, weil das Fragezeichen eine besondere Funktion hat (vorangegangenes Zeichen darf ein- oder keinmal vorkommen) und nicht für ein Fragezeichen steht - genauso wie der Punkt. ^index.php?index$ passt auf index.phpindex, index.phindex, indexXphpindex, index8phindex und vieles mehr, aber nicht auf index.php?index. Richtig wäre einzig ^index\.php\?index$ gewesen.

Um die URL-Parameter aus Deiner neuen URL zu verbannen, leite nach /? weiter, nicht nach / (das Fragezeichen verschwindet automatisch, weil dahinter keine Parameter folgen). Ohne diese Maßnahme würdest Du von /index.php?index nach /?index kommen.

Verfasst: 24.10.2006, 18:08
von Da5id
haha hat geschrieben:Mit RewriteRule lassen sich die URL-Parameter nicht abfragen (steht als großer Hinweis in der RewriteRule-Anleitung, wenn auch etwas weiter unten). Du musst den Pfad mit RewriteRule prüfen und die URL-Parameter mit RewriteCond und der Variablen %{QUERY_STRING}.
Uih, vielen Dank haha, das sind schon mal 50%.

Das klappt: :P

RewriteCond %{QUERY_STRING} ^index$
RewriteRule ^(.*)$ /? [L,R=301]

...aber das leider nicht :(

RewriteCond %{SCRIPT_NAME} ^index.php$
RewriteRule ^(.*)$ /? [L,R=301]

hab's auch mit ^/index.php$ und mit ^index\.php$ und mit ^/index\.php$ probiert :roll:

Verfasst:
von

Verfasst: 24.10.2006, 19:01
von haha
Da5id hat geschrieben:Das klappt: :P

RewriteCond %{QUERY_STRING} ^index$
RewriteRule ^(.*)$ /? [L,R=301]

...aber das leider nicht :(

RewriteCond %{SCRIPT_NAME} ^index.php$
RewriteRule ^(.*)$ /? [L,R=301]
Äh, mit Verlaub, von %{SCRIPT_NAME} habe ich nichts gesagt und auch nichts davon, erst %{QUERY_STRING} mit allen Pfaden (.*) zu prüfen und dann noch was anderes mit allen Pfaden. Ich schrieb "Du musst den Pfad mit RewriteRule prüfen und die URL-Parameter mit RewriteCond und der Variablen %{QUERY_STRING}.":

RewriteCond %{QUERY_STRING} ^index$
RewriteRule ^index\.php$ /? [L,R=301]

Runde Klammern brauchst Du in den Mustern übrigens auch nicht, wenn Du deren Inhalt nicht mittels $1 bis $9 bzw. %1 bis %9 weiterverwenden möchtest.

Und RewriteBase / hast Du doch sicher auch direkt nach der RewriteEngine-Zeile stehen?

Verfasst: 24.10.2006, 20:22
von Da5id
haha hat geschrieben:RewriteCond %{QUERY_STRING} ^index$
RewriteRule ^index\.php$ /? [L,R=301]
Das hat so nicht funktioniert. Mit einer kleinen Änderung

RewriteCond %{QUERY_STRING} ^index$
RewriteRule ^index\.php.*$ /? [L,R=301]

aber dann doch. Ist das so korrekt?

%{SCRIPT_NAME} hatte ich verwendet, weil
domain.tld/index.php
ja kein query string enthält. Ich hab es jetzt auch nochmal mit

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^index\.php.*$ /? [L,R=301]

versucht zu lösen. Dann kommt aber der Hinweis, auf eine unzulässige Zahl der Umleitungen, wenn ich domain.tld/index.php (also ohne query string) versuche zu laden. Das kann also nicht richtig sein...

Verfasst: 24.10.2006, 22:23
von haha
Da5id hat geschrieben:Das hat so nicht funktioniert. Mit einer kleinen Änderung

RewriteCond %{QUERY_STRING} ^index$
RewriteRule ^index\.php.*$ /? [L,R=301]

aber dann doch. Ist das so korrekt?
Das würde bedeuten, dass zwischen dem .php und dem Ende ($) noch irgendwelche Zeichen (.*) stehen, was aber bei "index.php" unzweifelhaft nicht der Fall sein dürfte.
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^index\.php.*$ /? [L,R=301]

versucht zu lösen. Dann kommt aber der Hinweis, auf eine unzulässige Zahl der Umleitungen, wenn ich domain.tld/index.php (also ohne query string) versuche zu laden. Das kann also nicht richtig sein...
Kann auch nicht sein, da muss noch irgendwas dazwischen funken. Kommentiere mal die anderen Rewrite- und Redirect-Zeilen in der .htaccess aus. Bei Endlosschleifen ist es hilfreich, mit Werkzeug wie livehttpheaders für Firefox/Mozilla den HTTP-Verkehr zu überwachen.

Bei mir leitet

RewriteCond %{QUERY_STRING} ^(|index)$
RewriteRule ^index\.php$ /? [R=302]

einwandfrei /index.php und /index.php?index nach / weiter, während / oder auch /index.php?bla unverändert bleiben.

Verfasst: 05.11.2006, 02:22
von Da5id
Sorry, hatte etwas Zeitmangel...

Also, ich habe jetzt mal alle anderen Rules deaktiviert.

Folgendes hat funktioniert:

RewriteCond %{QUERY_STRING} ^index$
RewriteRule ^index\.php$ /? [L,R=301]

dies dagegen nicht:

RewriteCond %{QUERY_STRING} ^|index$
RewriteRule ^index\.php$ /? [L,R=301]

Umleitungslimit übeschritten! Mit und ohne "RewriteBase /"

Ist ja vom Prinzip dasselbe wie die Einzelanweisungen

RewriteCond %{QUERY_STRING} ^index$
RewriteRule ^index\.php$ /? [L,R=301]
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^index\.php$ /? [L,R=301]

also muss das Problem auftreten, wenn RewriteCond auf einen leeren QUERY_STRING abfragt.

Das Umleitungslimit wird auch überschritten, wenn ich nur

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^index\.php$ /? [L,R=301]

aktiviere. Nervige Angelegenheit...

EDIT:
Dabei fällt mir doch etwas auf: Wenn bei der letzten Regel die Umleitung auf / ausgeführt wird, ist der Query String ja wieder leer. Dann wird sicher endlos versucht / aufzurufen. Also muss die Regel anders lauten.

Verfasst: 05.11.2006, 03:45
von Da5id
Noch ein Nachschwärmer ;-)

Die Lösung mit der robots.txt ist für mich leider völlig unbefriedigend, da hier ein Link verloren geht und das auf ettlichen Seiten.

Verfasst: 05.11.2006, 11:35
von haha
Ich hatte vorgestern bei jemand anderem ein ähnliches Problem und bin dann letztlich auf die folgende Lösung gekommen (angepasst für Deinen Fall):

RewriteCond %{THE_REQUEST} ^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$
RewriteRule .* %1? [R=301]

Die beiden Zeilen greifen alle Aufrufe von /index.bla und /index.bla?index ab und leiten sie nach / weiter, auch solche in Unterverzeichnissen und unabhängig von der Dateiendung.

Da hier auf die Anfragezeile vom Browser zurückgegriffen wird (%{THE_REQUEST} und diese sich während der ganzen Verarbeitung im Webserver nicht ändert, kann es weder zu einer Endlosschleife kommen, noch greifen weitere, verschachtelte Rewrite- oder Redirect-Anweisungen.

Verfasst: 10.11.2006, 22:45
von Da5id
haha hat geschrieben:Ich hatte vorgestern bei jemand anderem ein ähnliches Problem und bin dann letztlich auf die folgende Lösung gekommen (angepasst für Deinen Fall):

RewriteCond %{THE_REQUEST} ^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$
RewriteRule .* %1? [R=301]
Da tut sich leider garnichts bei mir, weder für den einen Fall, noch für den anderen :-?

Verfasst: 11.11.2006, 11:41
von haha
Da5id hat geschrieben:
haha hat geschrieben:RewriteCond %{THE_REQUEST} ^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$
RewriteRule .* %1? [R=301]
Da tut sich leider garnichts bei mir, weder für den einen Fall, noch für den anderen :-?
[x] Ratlos. Bei mir funktioniert's.

Hast Du die .htaccess mal sicherheitshalber gänzlich geleert (bis auf RewriteEngine, RewriteBase und das Objekt dieser Untersuchung natürlich)? Entferne vom obigen Muster die vier Zeichen \d+$ am Ende und probiere es so. Falls es auch dann nicht funktioniert, wende Dich mit den diversen Vorschlägen an den Serveradministrator, oder, falls Du das selbst bist, schalte das Rewrite-Debugging ein.

Verfasst: 15.11.2006, 01:34
von Da5id
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$
RewriteRule .* %1? [R=301]

Alles andere hab ich aus der .htaccess entfernt und auch die letzten Zeichen gelöscht....

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.
RewriteRule .* %1? [R=301]

...hat nix gebracht... und ja, ich sollte selbst der Administrator sein. Dafür habe ich allerdings keinen Führerschein gemacht :oops:

Den Server hat mir mal jemand eingerichtet, der inzwischen abgetaucht ist. Ich hab davon wenig Ahnung. Hab es nur logisch fortgesetzt, für neue Domains etc.

Das rewrite.log File habe ich auf dem Server nicht gefunden. Ich weiss nicht, ob es weiterhilft, in meiner httpd.conf steht für die betreffende Domain folgendes:

<VirtualHost 47.11.47.11>
ServerName domain.de
DocumentRoot /var/www/domain/de
</VirtualHost>

Diese Domain ist auch gleichzeitig die Hauptdomain, wenn es das überhaupt gibt. Darunter sind noch andere Domains mit demselben VirtualHost definiert, z.B....

<VirtualHost 47.11.47.11>
ServerName domain2.de
ServerAlias *.domain2.de
DocumentRoot /var/www/domain2
ErrorLog /var/log/apache/error-domain2.log
CustomLog /var/log/apache/access-domain2.log combined
ScriptAlias /item/ /var/www/domain2/index.cgi/
<Directory /var/www/domain2/exec/>
Options +FollowSymLinks
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
<Directory />
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Habe nicht verstanden, wo ich die RewriteLog Directive setzen müßte. Ich nehme mal an, auch in der httpd.conf ... oder in der .htaccess ...?

Verfasst: 15.11.2006, 11:50
von haha
Da5id hat geschrieben:Den Server hat mir mal jemand eingerichtet, der inzwischen abgetaucht ist. Ich hab davon wenig Ahnung.
Deswegen halte ich auch so viel von den ganzen Root-Server-, vServer- und Sonstwas-Server-Angeboten…
Habe nicht verstanden, wo ich die RewriteLog Directive setzen müßte. Ich nehme mal an, auch in der httpd.conf ... oder in der .htaccess ...?
Schau nochmal in die Anleitung. Zu jeder Anweisung gibt es eine Zeile namens "Context:", dort steht, wo die Anweisung auftauchen darf. Bei RewriteLog und RewriteLogLevel steht "server config, virtual host", diese dürfen also nur in der httpd.conf (und dort per Include eingebundenen Dateien), sowie innerhalb eines <virtualhost>-Blocks auftauchen.

Ändere den <virtualhost>-Block Deiner betroffenen Hauptdomain folgendermaßen:

<VirtualHost 47.11.47.11>
ServerName domain.de
DocumentRoot /var/www/domain/de
RewriteLog /var/log/apache/rewrite.log
RewriteLogLevel 9
</VirtualHost>

Nachdem Du den Apache neu gestartet hast, sollte die Datei /var/log/apache/rewrite.log sich bei jedem Zugriff mit einem sehr detailieren Protokoll über die Aktivitäten von mod_rewrite füllen.

Achte bitte darauf, dass Du, sobald das Problem gelöst ist, die beiden RewriteLog-Zeilen auskommentierst oder ganz löscht und den Apache wiederum neu startest. mod_rewrite müllt Dir sonst die ganze Kiste voll.

Das Protokoll sieht folgendermaßen aus (alles in einer Zeile):

<12.34.56.78> - - [11/Nov/2006:11:34:28 +0100] [example.com/sid#8179428][rid#81ce220/initial] (3) [per-dir /home/www/example.com/htdocs/] add path info postfix: /home/www/example.com/htdocs/bla -> /home/www/example.com/htdocs/bla/index.gif

Baue ich besagte Zeilen

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$
RewriteRule .* %1? [R=301,L]

in die oberste .htaccess ein, durchläuft die Anfrage nach /bla/index.gif diese Schritte (unwichtige Felder wie Zeit, IP-Adresse, etc aus den Zeilen entfernt):

A [per-dir] add path info postfix: /home/www/example.com/htdocs/bla -> /home/www/example.com/htdocs/bla/index.gif
A [per-dir] strip per-dir prefix: /home/www/example.com/htdocs/bla/index.gif -> bla/index.gif
A [per-dir] applying pattern '.*' to uri 'bla/index.gif'
A RewriteCond: input='GET /bla/index.gif HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => matched
A [per-dir] rewrite bla/index.gif -> /bla/?
A split uri=/bla/? -> uri=/bla/, args=<none>
A [per-dir] explicitly forcing redirect with htt&#1088;://example.com/bla/
A [per-dir] trying to replace prefix /home/www/example.com/htdocs/ with /
A [per-dir] escaping htt&#1088;://example.com/bla/ for redirect
A [per-dir] redirect to htt&#1088;://example.com/bla/ [REDIRECT/301]
B [per-dir] add path info postfix: /home/www/example.com/htdocs/bla -> /home/www/example.com/htdocs/bla/
B [per-dir] strip per-dir prefix: /home/www/example.com/htdocs/bla/ -> bla/
B [per-dir] applying pattern '.*' to uri 'bla/'
B RewriteCond: input='GET /bla/ HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
B [per-dir] pass through /home/www/example.com/htdocs/bla

Sieht auf den ersten Blick vielleicht etwas verwirrend aus, lässt sich aber bei genauerem Studium gut nachvollziehen. Beachte, dass das eigentlich zwei Anfragen sind, A und B, B ergibt sich aus der 301-Weiterleitung (bei "[REDIRECT/301]").

Verfasst: 16.11.2006, 03:11
von Da5id
haha hat geschrieben:Deswegen halte ich auch so viel von den ganzen Root-Server-, vServer- und Sonstwas-Server-Angeboten…
Ja ja, vServer nie wieder! Da wird einem ein neues Systemupdate aufgezwungen (wie schon erlebt) und nix läuft mehr. Dann doch besser Rootserver. Da kannst du wenigstens machen was du willst und bei mir heißt das meist "möglichst wenig", weil ich froh bin, wenn alles läuft. Angeblich soll ein Linux-System ohne irgendwelche Updates ja 10 Jahre problemlos laufen und in 10 Jahren habe das System vielleicht auch verstanden :roll:
haha hat geschrieben:Ändere den <virtualhost>-Block Deiner betroffenen Hauptdomain folgendermaßen:

<VirtualHost 47.11.47.11>
ServerName domain.de
DocumentRoot /var/www/domain/de
RewriteLog /var/log/apache/rewrite.log
RewriteLogLevel 9
</VirtualHost>

Nachdem Du den Apache neu gestartet hast, sollte die Datei /var/log/apache/rewrite.log sich bei jedem Zugriff mit einem sehr detailieren Protokoll über die Aktivitäten von mod_rewrite füllen.
Habe 3 Zugriffe gemacht. Einen auf die Domain selbst, einen auf die index.php ohne Parameter und einen auf index.php?index ... und so schaut das bei mir aus....

(3) [per-dir /var/www/domain/de/] add path-info postfix: /var/www/domain/de -> /var/www/domain/de/
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/ ->
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri ''
(4) RewriteCond: input='GET / HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/index.php -> index.php
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'index.php'
(4) RewriteCond: input='GET / HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/index.php
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/phpwcms_template/inc_js/frontend.js -> phpwcms_template/inc_js/frontend.js
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'phpwcms_template/inc_js/frontend.js'
(4) RewriteCond: input='GET /phpwcms_template/inc_js/frontend.js HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/phpwcms_template/inc_js/frontend.js
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/phpwcms_template/inc_css/frontend.css -> phpwcms_template/inc_css/frontend.css
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'phpwcms_template/inc_css/frontend.css'
(4) RewriteCond: input='GET /phpwcms_template/inc_css/frontend.css HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/phpwcms_template/inc_css/frontend.css
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/img/leer.gif -> img/leer.gif
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'img/leer.gif'
(4) RewriteCond: input='GET /img/leer.gif HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/img/leer.gif
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/banner/home.jpg -> banner/home.jpg
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'banner/home.jpg'
(4) RewriteCond: input='GET /banner/home.jpg HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/banner/home.jpg
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/img/article/nav_link_0.gif -> img/article/nav_link_0.gif
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'img/article/nav_link_0.gif'
(4) RewriteCond: input='GET /img/article/nav_link_0.gif HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/img/article/nav_link_0.gif
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/favicon.ico -> favicon.ico
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'favicon.ico'
(4) RewriteCond: input='GET /favicon.ico HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/favicon.ico
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/index.php -> index.php
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'index.php'
(4) RewriteCond: input='GET /index.php?index HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/index.php
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/phpwcms_template/inc_js/frontend.js -> phpwcms_template/inc_js/frontend.js
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'phpwcms_template/inc_js/frontend.js'
(4) RewriteCond: input='GET /phpwcms_template/inc_js/frontend.js HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/phpwcms_template/inc_js/frontend.js
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/phpwcms_template/inc_css/frontend.css -> phpwcms_template/inc_css/frontend.css
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'phpwcms_template/inc_css/frontend.css'
(4) RewriteCond: input='GET /phpwcms_template/inc_css/frontend.css HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/phpwcms_template/inc_css/frontend.css
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/img/leer.gif -> img/leer.gif
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'img/leer.gif'
(4) RewriteCond: input='GET /img/leer.gif HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/img/leer.gif
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/banner/home.jpg -> banner/home.jpg
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'banner/home.jpg'
(4) RewriteCond: input='GET /banner/home.jpg HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/banner/home.jpg
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/img/article/nav_link_0.gif -> img/article/nav_link_0.gif
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'img/article/nav_link_0.gif'
(4) RewriteCond: input='GET /img/article/nav_link_0.gif HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/img/article/nav_link_0.gif
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/favicon.ico -> favicon.ico
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'favicon.ico'
(4) RewriteCond: input='GET /favicon.ico HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/favicon.ico
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/index.php -> index.php
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'index.php'
(4) RewriteCond: input='GET /index.php HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/index.php
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/phpwcms_template/inc_js/frontend.js -> phpwcms_template/inc_js/frontend.js
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'phpwcms_template/inc_js/frontend.js'
(4) RewriteCond: input='GET /phpwcms_template/inc_js/frontend.js HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/phpwcms_template/inc_js/frontend.js
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/phpwcms_template/inc_css/frontend.css -> phpwcms_template/inc_css/frontend.css
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'phpwcms_template/inc_css/frontend.css'
(4) RewriteCond: input='GET /phpwcms_template/inc_css/frontend.css HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/phpwcms_template/inc_css/frontend.css
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/img/leer.gif -> img/leer.gif
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'img/leer.gif'
(4) RewriteCond: input='GET /img/leer.gif HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/img/leer.gif
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/banner/home.jpg -> banner/home.jpg
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'banner/home.jpg'
(4) RewriteCond: input='GET /banner/home.jpg HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/banner/home.jpg
(3) [per-dir /var/www/domain/de/] strip per-dir prefix: /var/www/domain/de/img/article/nav_link_0.gif -> img/article/nav_link_0.gif
(3) [per-dir /var/www/domain/de/] applying pattern '.*' to uri 'img/article/nav_link_0.gif'
(4) RewriteCond: input='GET /img/article/nav_link_0.gif HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
(1) [per-dir /var/www/domain/de/] pass through /var/www/domain/de/img/article/nav_link_0.gif
haha hat geschrieben:Sieht auf den ersten Blick vielleicht etwas verwirrend aus, lässt sich aber bei genauerem Studium gut nachvollziehen. Beachte, dass das eigentlich zwei Anfragen sind, A und B, B ergibt sich aus der 301-Weiterleitung (bei "[REDIRECT/301]").
Sehr verwirrend, ja! Bei mir steht auch nicht A+B, wie du siehst, sondern Zahlen. Die RewriteLog-Zeilen habe ich wieder auskommentiert. Danke für den Hinweis!

Verfasst: 16.11.2006, 12:19
von haha
Da5id hat geschrieben:Dann doch besser Rootserver. Da kannst du wenigstens machen was du willst und bei mir heißt das meist "möglichst wenig", weil ich froh bin, wenn alles läuft.
Ich denke, für Dich wäre ein Hosting-Angebot bis auf weiteres geeigneter. Ich weiß zugegebenermaßen nicht, was Du sonst noch auf der Kiste treibst, aber in den üblichen Fällen hat ein eigener Server (egal ob virtuell oder echt) keine großartigen Vorteile gegenüber einem Hostingangebot, erfordert dafür aber ein gutes Stück zusätzlicher Arbeit.
Es ist nicht so, dass ich kein Verständnis für den Spaß eines eigenen Servers habe - ich habe selbst einen eigenen, und zwar nichtmal ein Rootserverangebot, sondern nur einen gemieten Stellplatz mit Netzwerkanschluss, der Rechner selbst gehört mir -, aber es macht einfach keinen Sinn, wenn man sich damit nicht auskennt; man hat mehr Ärger als Zusatznutzen davon.

Von daher würde ich Dir raten, Dir zumindest einen ollen PC als Linuxserver zu Hause einzurichten (dafür reicht selbst ein Pentium 100), auf dem Du dann nach Herzenslust sowohl Deine Seiten als auch das System ausprobieren kannst.
Es wäre auch nicht verkehrt, wenn Du, zumindest, bis Du Dich beim Serverbetrieb wirklich fit fühlst, auf ein ordentliches Hostingangebot wechselst.

Aber zum Thema:
strip per-dir prefix: /var/www/domain/de/index.php -> index.php
applying pattern '.*' to uri 'index.php'
RewriteCond: input='GET /index.php?index HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched

strip per-dir prefix: /var/www/domain/de/index.php -> index.php
applying pattern '.*' to uri 'index.php'
RewriteCond: input='GET /index.php HTTP/1.1' pattern='^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$' => not-matched
Das Problem ist, dass unser RewriteCond-Muster angeblich nicht auf die HTTP-Anfragen passt. Nur das Warum ist mir offen gesagt restlos schleierhaft, denn probiere ich das Ganze in Javascript, funktioniert's:

var p=/^[A-Z]+\s+(.*\/)(index)\.[a-z]+(\?index)?\s+HTTP\/1\.\d+$/; alert(p.exec('GET /index.php?index HTTP/1.1'));

…ergibt brav "GET /index.php?index HTTP/1.1", "/", "index" und "?index" (gesamte Zeile plus die Inhalte der drei runden Klammern). Genauso bei /index.php ohne Parameter, nur dass dann logischerweise die letzte Klammer leer bleibt.

Muss ich drüber grübeln… In einem Anflug von Verzweiflung würde ich jetzt nochmal diese Varianten durchprobieren:

^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.\d+$
^[A-Z]+ +(.*/)(index)\.[a-z]+(\?index)? +HTTP/1\.\d+$
^[A-Z]+ (.*/)(index)\.[a-z]+(\?index)? HTTP/1\.\d+$

^[A-Z]+\s+(.*/)(index)\.[a-z]+(\?index)?\s+HTTP/1\.
^[A-Z]+ +(.*/)(index)\.[a-z]+(\?index)? +HTTP/1\.
^[A-Z]+ (.*/)(index)\.[a-z]+(\?index)? HTTP/1\.

^GET\s+(.*/)(index)\..+(\?index)?\s+HTTP/1\.\d+$
^GET +(.*/)(index)\..+(\?index)? +HTTP/1\.\d+$
^GET (.*/)(index)\..+(\?index)? HTTP/1\.\d+$

^GET\s+(.*/)(index)\..+(\?index)?\s+HTTP/1\.
^GET +(.*/)(index)\..+(\?index)? +HTTP/1\.
^GET (.*/)(index)\..+(\?index)? HTTP/1\.
Sehr verwirrend, ja! Bei mir steht auch nicht A+B, wie du siehst, sondern Zahlen.
A und B stammten von mir, um die beiden Anfragen kenntlich zu machen, quasi als als Ersatz für die gelöschten Datum-und-Zeit-Felder.