You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-de@httpd.apache.org by Christoph Löffler <cl...@xtraport.de> on 2004/04/22 10:22:52 UTC

Problem mit mod rewrite

Hallo,

ich habe folgendes Problem:

dynamisch erzeugte Webseite holt Seiten aus DB
Parameter:
   lang = [de|en]
   index = numerischer Index eines Eintrages in DB

Damit ich keine URLs der Form
   page.php?lang=de&index=47
habe, setze ich mod rewrite ein, das mir URLs der Form
   /de/47.html
in obiges umsetzt.

Das Rewrite Rule in der .htaccess ist folgendes:
   RewriteEngine On
   RewriteRule \.(html)$ /sidounX.php

DAs klappt auch wunderbar, mit einer nicht sehr schönen Konsequenz:
Bestimmte Clients können die Seiten nicht lesen, z.B.
- Suchmaschinenrobots
- HTML Validator
- lynx
- wget
- ... ? ein Testuser hat berichtet, dass er die Seiten mit IE 6 
nicht aufrufen kann, da wird womöglich was anderes (Firewall?) dafür 
sorgen, dass es nicht geht. (Vermutung)

Zum Testen eine URL

http://www.movens.de/de/1.html

Ein moderner Browser (Mozilla, IE) zeigt die Seite normal an.

Ein Aufruf über http://validator.w3.org/ ergibt:


   Source Listing

   Below is the source input I used for this validation:

    1:

lynx http://www.movens.de/de/1.html bringt auch eine leere Seite, 
wget legt eine leere Datei ab.

Ich bin ratlos. Momentan bleibt mir nur, auf mod rewrite zu 
verzichten, und halt wieder Parameter an URL dranhängen wie gehabt.

Ich habe schon mehrere Tage investiert, um darüber im Netz was zu 
finden, bin aber auf nichts gestossen, was mir weiterhilft.

Vielleicht weiss von euch jemand was darüber?

Grüße
Christoph
-- 
-------------------------------------------------------
*  Christoph Löffler - c.loeffler AT xtraport DOT de  *
*  xtraport IT Consulting     -      www.xtraport.de  *
*  Fingerprint: GnuPG                                 *
*  9082 0E53 50C1 209C 0E6F 4E3A 26F0 83F3 072B 44B0  *
-------------------------------------------------------

--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


RE: Problem mit mod rewrite

Posted by Hannes Korte <em...@hkorte.com>.
Hi Christoph,

hast du mal probiert, die Seite mit wget zu laden, bevor du die RewriteRule
gesetzt hast?

Hast du vielleicht ein einer RewriteCond vorher noch eine Browserweiche
eingesetzt?

Sonst könnte ich mir höchstens vorstellen, dass das PHP-Script sich bei
unterschiedlichen USER_AGENT's anders verhält.

--
Gruß
Hannes


--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Problem mit mod rewrite

Posted by Christoph Löffler <cl...@xtraport.de>.
Hallo

ich schrieb heute:

> ich habe folgendes Problem:

immer noch...

> dynamisch erzeugte Webseite holt Seiten aus DB
> Parameter:
>   lang = [de|en]
>   index = numerischer Index eines Eintrages in DB
> 
> Damit ich keine URLs der Form
>   page.php?lang=de&index=47
> habe, setze ich mod rewrite ein, das mir URLs der Form
>   /de/47.html
> in obiges umsetzt.
> 
> Das Rewrite Rule in der .htaccess ist folgendes:
>   RewriteEngine On
>   RewriteRule \.(html)$ /sidounX.php
> 
> DAs klappt auch wunderbar, mit einer nicht sehr schönen Konsequenz:
> Bestimmte Clients können die Seiten nicht lesen, z.B.
> - Suchmaschinenrobots
> - HTML Validator
> - lynx
> - wget
[...]

Habe das Verhalten von wget zwischenzeitlich etwas genauer 
untersucht (sidoun.consulting ist unser lokaler Server):


chris@shogun:~$ wget -S http://sidoun.consulting/
--17:21:08--  http://sidoun.consulting/
            => `index.html'
Resolving sidoun.consulting... done.
Connecting to sidoun.consulting[192.168.0.150]:80... connected.
HTTP request sent, awaiting response...
  1 HTTP/1.1 302 Found
  2 Date: Thu, 22 Apr 2004 15:21:08 GMT
  3 Server: Apache/1.3.26 (Unix) Debian GNU/Linux PHP/4.3.4
  4 X-Powered-By: PHP/4.3.4
  5 Location: http://sidoun.consulting/de/1.html
  6 Connection: close
  7 Content-Type: text/html; charset=iso-8859-1
Location: http://sidoun.consulting/de/1.html [following]
--17:21:08--  http://sidoun.consulting/de/1.html
            => `1.html'
Connecting to sidoun.consulting[192.168.0.150]:80... connected.
HTTP request sent, awaiting response...
  1 HTTP/1.1 200 OK
  2 Date: Thu, 22 Apr 2004 15:21:08 GMT
  3 Server: Apache/1.3.26 (Unix) Debian GNU/Linux PHP/4.3.4
  4 X-Powered-By: PHP/4.3.4
  5 Connection: close
  6 Content-Type: text/html; charset=iso-8859-1

     [ <=> 
  ] 0             --.--K/s

17:21:09 (0.00 B/s) - `1.html' saved [0]


mit wget, der sich als Mozilla ausgibt ;-)

chris@shogun:~$ wget -S -U "Mozilla/5.0 (Windows; U; Windows NT 5.1; 
en-US; rv:1.7b) Gecko/20040316" http://sidoun.consulting/
--17:20:23--  http://sidoun.consulting/
            => `index.html'
Resolving sidoun.consulting... done.
Connecting to sidoun.consulting[192.168.0.150]:80... connected.
HTTP request sent, awaiting response...
  1 HTTP/1.1 302 Found
  2 Date: Thu, 22 Apr 2004 15:20:23 GMT
  3 Server: Apache/1.3.26 (Unix) Debian GNU/Linux PHP/4.3.4
  4 X-Powered-By: PHP/4.3.4
  5 Location: http://sidoun.consulting/de/1.html
  6 Connection: close
  7 Content-Type: text/html; charset=iso-8859-1
Location: http://sidoun.consulting/de/1.html [following]
--17:20:23--  http://sidoun.consulting/de/1.html
            => `1.html'
Connecting to sidoun.consulting[192.168.0.150]:80... connected.
HTTP request sent, awaiting response...
  1 HTTP/1.1 200 OK
  2 Date: Thu, 22 Apr 2004 15:20:23 GMT
  3 Server: Apache/1.3.26 (Unix) Debian GNU/Linux PHP/4.3.4
  4 X-Powered-By: PHP/4.3.4
  5 Content-length: 2206
  6 Keep-Alive: timeout=15, max=100
  7 Connection: Keep-Alive
  8 Content-Type: text/html; charset=iso-8859-1

100%[==============================================================>] 
2,206          2.10M/s    ETA 00:00

17:20:23 (2.10 MB/s) - `1.html' saved [2206/2206]


was mich dabei verwundert, dass die erste Variante ein "Connection: 
Close" liefert. Der Test mit http://www.delorie.com/web/headers.html
auf http://www.movens.de/ lieferte nichts anderes:

Test mit http://www.movens.de/

HTTP/1.1 302 Found
Date: Thu, 22 Apr 2004 14:59:59 GMT
Server: Apache/1.3.26 (Unix) Debian GNU/Linux PHP/4.3.6 
mod_ssl/2.8.9 OpenSSL/0.9.6d
X-Powered-By: PHP/4.3.6
Location: http://www.movens.de/de/1.html
Connection: close
Content-Type: text/html; charset=iso-8859-1


Test mit http://www.movens.de/de/1.html

HTTP/1.1 200 OK
Date: Thu, 22 Apr 2004 15:01:18 GMT
Server: Apache/1.3.26 (Unix) Debian GNU/Linux PHP/4.3.6 
mod_ssl/2.8.9 OpenSSL/0.9.6d
X-Powered-By: PHP/4.3.6
Connection: close
Content-Type: text/html; charset=iso-8859-1

Dummerweise verhalten sich Suchmaschinen und der HTML Validator eben 
wie wget und nicht wie "normale Browser".

Weiss jmd. Rat?

Grüße
Chris
-- 
-------------------------------------------------------
*  Christoph Löffler - c.loeffler AT xtraport DOT de  *
*  xtraport IT Consulting     -      www.xtraport.de  *
*  Fingerprint: GnuPG                                 *
*  9082 0E53 50C1 209C 0E6F 4E3A 26F0 83F3 072B 44B0  *
-------------------------------------------------------

--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Problem mit mod rewrite [SOLVED]

Posted by Max Dittrich <Ma...@t-online.de>.
Christoph Löffler wrote:

[..]

>>>>>Scheinbar weil der Webmaster des Servers irgendeinen obskuren und
>>>>>hilflosen AntiLeach-Schutz (in sein PHP?) eingebaut hat.
>>>>
>>>>das ist nicht der Fall.
>>>
>>>Die Vermutung lag nahe (auto_prepend_file).
> 
> 
> Es war ein include! Danke für die Idee, nach so was ähnlichem zu suchen.
> Die Datei http://www.movens.de/inc/weiche.phps wird jedesmal von der
> Steuerdatei eingebunden, das steht am Ende ein exit() im Falle, dass
> keiner der im Skript angegebenen Browser die Datei anfragt. Ist jetzt
> auskommentiert, jetzt klappts auch mit wget!
> 
> Es war der PHP-Programmierer...(nicht der WebMaster ;-)

:). War nicht so gemeint.

> 
> Mit dem habe ich morgen noch ein Wörtchen zu reden.... Was mich das
> Arbeitszeit gekostet hat! Tob!

Genau, schüttel den mal durch. ;)

Das exit() ist wirklich Unsinn. Neben den ganzen missachteten Browsern 
gibt es auch sicher ein paar Firmennetze, die Angaben wie User-Agent und 
Referer nicht über Ihren Proxy rauslassen. Und nebenbei: ein switch mit 
break wäre vermutlich performanter als wiederholte if-statements, die 
sich ausschliessen.

gruss,
.max


--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Problem mit mod rewrite [SOLVED]

Posted by Christoph Löffler <cl...@xtraport.de>.
Hallo,

vielen Dank, allen, die sich mit der Sache beschäftigt haben.

<Zitiere wer="Christoph Löffler">
> <Zitiere wer="Max Dittrich">
>> Christoph Löffler wrote:
>>
>>> Max Dittrich wrote:
>>>
>>>> Scheinbar weil der Webmaster des Servers irgendeinen obskuren und
>>>> hilflosen AntiLeach-Schutz (in sein PHP?) eingebaut hat.
>>>
>>> das ist nicht der Fall.
>>
>> Die Vermutung lag nahe (auto_prepend_file).

Es war ein include! Danke für die Idee, nach so was ähnlichem zu suchen.
Die Datei http://www.movens.de/inc/weiche.phps wird jedesmal von der
Steuerdatei eingebunden, das steht am Ende ein exit() im Falle, dass
keiner der im Skript angegebenen Browser die Datei anfragt. Ist jetzt
auskommentiert, jetzt klappts auch mit wget!

Es war der PHP-Programmierer...(nicht der WebMaster ;-)

Mit dem habe ich morgen noch ein Wörtchen zu reden.... Was mich das
Arbeitszeit gekostet hat! Tob!

Grüße
Christoph (der sich sicher gleich wieder beruhigt)
-- 
-------------------------------------------------------
*  Christoph Löffler      *  c.loeffler@xtraport.de   *
*  xtraport IT Consulting *  http://www.xtraport.de   *
*  Fingerprint: GnuPG                                 *
*  9082 0E53 50C1 209C 0E6F 4E3A 26F0 83F3 072B 44B0  *
-------------------------------------------------------
Fremdwörter sind mein Tresor, da bin ich eine Konifere,
damit kann mir keiner imprägnieren!
Da können noch Generatoren von profilieren.
-------------------------------------------------------



--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Problem mit mod rewrite

Posted by Christoph Löffler <cl...@xtraport.de>.
Hallo,

<Zitiere wer="Max Dittrich">
> Christoph Löffler wrote:
>
>> Max Dittrich wrote:
>>
>>
>>> Scheinbar weil der Webmaster des Servers irgendeinen obskuren und
>>> hilflosen AntiLeach-Schutz (in sein PHP?) eingebaut hat.
>>
>>
>> das ist nicht der Fall.
>
> Die Vermutung lag nahe (auto_prepend_file).
>
> Leider finde ich die anfänglich von Dir erwähnte Seite page.php auf die
> Deine RewriteRule umschreibt nicht. Dann hätte ich an nochmal testen
> können, ob das Rewriting auszuschliessen ist.

Die heisst http://www.movens.de/sidounX.php

> Schalte doch mal für einen kurzen Moment das RewriteLog ein, vielleicht
> findet sich dort noch ein Hinweis.

Hmm, auf meiner lokalen Testmaschine hab ich das mitlaufen lassen. Hat mir
jetzt nichts gesagt, hatte nur auf LogLevel 2, die Meldungen bei Aufruf
eines Browsers und bei wget waren identisch.



> Und wenn Dich das eh schon länger beschäftigt, würde ich gleich auf die
> aktuelle Apache-Version wechseln. AFAIK wurden erst in den letzten zwei
> Versionen einige Dinge in mod_rewrite gefixed.

Du meinst die Version 2.0.x? Die Version: 2.0.49-0.backports.org.1 wäre
auf backports.org für Debian zu haben...

Grüße
Chris
-- 
-------------------------------------------------------
*  Christoph Löffler      *  c.loeffler@xtraport.de   *
*  xtraport IT Consulting *  http://www.xtraport.de   *
*  Fingerprint: GnuPG                                 *
*  9082 0E53 50C1 209C 0E6F 4E3A 26F0 83F3 072B 44B0  *
-------------------------------------------------------
Fremdwörter sind mein Tresor, da bin ich eine Konifere,
damit kann mir keiner imprägnieren!
Da können noch Generatoren von profilieren.
-------------------------------------------------------



--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Problem mit mod rewrite

Posted by Max Dittrich <Ma...@t-online.de>.
Christoph Löffler wrote:

> Max Dittrich wrote:
> 
> 
>> Scheinbar weil der Webmaster des Servers irgendeinen obskuren und 
>> hilflosen AntiLeach-Schutz (in sein PHP?) eingebaut hat.
> 
> 
> das ist nicht der Fall.

Die Vermutung lag nahe (auto_prepend_file).

Leider finde ich die anfänglich von Dir erwähnte Seite page.php auf die 
Deine RewriteRule umschreibt nicht. Dann hätte ich an nochmal testen 
können, ob das Rewriting auszuschliessen ist.

Schalte doch mal für einen kurzen Moment das RewriteLog ein, vielleicht 
findet sich dort noch ein Hinweis.

Und wenn Dich das eh schon länger beschäftigt, würde ich gleich auf die 
aktuelle Apache-Version wechseln. AFAIK wurden erst in den letzten zwei 
Versionen einige Dinge in mod_rewrite gefixed.

[...]

gruss,
.max


--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Problem mit mod rewrite

Posted by Christoph Löffler <cl...@xtraport.de>.
Max Dittrich wrote:


> Scheinbar weil der Webmaster des Servers irgendeinen obskuren und 
> hilflosen AntiLeach-Schutz (in sein PHP?) eingebaut hat.

das ist nicht der Fall.

> Ich kann Dein Problem mit
> 
>   "wget http://www.movens.de/de/1.html"
> 
> nachvollziehen, aber mit
> 
> wget 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7b) \
> Gecko/20040316' http://www.movens.de/de/1.html
> 
> 'beheben'.
> 
> Wäre interessant was da eingesetzt wird.

Ich bin der Webmaster.

Grüße
Chris
-- 
-------------------------------------------------------
*  Christoph Löffler - c.loeffler AT xtraport DOT de  *
*  xtraport IT Consulting     -      www.xtraport.de  *
*  Fingerprint: GnuPG                                 *
*  9082 0E53 50C1 209C 0E6F 4E3A 26F0 83F3 072B 44B0  *
-------------------------------------------------------

--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Problem mit mod rewrite

Posted by Max Dittrich <Ma...@t-online.de>.
Christoph Löffler wrote:
> Hallo,
> 
>>> Der Punkt muss noch escaped werden,
>>> oder? So:
>>> RewriteRule ^/([^/]*)/([^/]*)\.html$ /page.php?lang=$1&index=$2
> 
> 
> Also, das funktioniert mit einem "normalen" Browser ebenfalls. Nur mit 
> wget oder lynx bekomme ich weiterhin eine leere Seite (0 bytes).
> (Beispiel: http://www.movens.de/de/1.html )

Scheinbar weil der Webmaster des Servers irgendeinen obskuren und 
hilflosen AntiLeach-Schutz (in sein PHP?) eingebaut hat.

Ich kann Dein Problem mit

   "wget http://www.movens.de/de/1.html"

nachvollziehen, aber mit

wget 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7b) \
Gecko/20040316' http://www.movens.de/de/1.html

'beheben'.

Wäre interessant was da eingesetzt wird.

gruss,
.max


--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Problem mit mod rewrite

Posted by Christoph Löffler <cl...@xtraport.de>.
Hallo,

>>Der Punkt muss noch escaped werden,
>>oder? So:
>>RewriteRule ^/([^/]*)/([^/]*)\.html$ /page.php?lang=$1&index=$2

Also, das funktioniert mit einem "normalen" Browser ebenfalls. Nur 
mit wget oder lynx bekomme ich weiterhin eine leere Seite (0 bytes).
(Beispiel: http://www.movens.de/de/1.html )

Können diese Clients und SearchRobots, oder auch der HTML Validator 
irgend eine Server Response nicht verstehen?

Grüße
Christoph
-- 
-------------------------------------------------------
*  Christoph Löffler - c.loeffler AT xtraport DOT de  *
*  xtraport IT Consulting     -      www.xtraport.de  *
*  Fingerprint: GnuPG                                 *
*  9082 0E53 50C1 209C 0E6F 4E3A 26F0 83F3 072B 44B0  *
-------------------------------------------------------

--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


RE: Problem mit mod rewrite

Posted by Hannes Korte <em...@hkorte.com>.
Hallo Christoph,

> > ich werde aus deiner RewriteRule nicht so ganz schlau,
>
> RewriteRule \.(html)$ /sidounX.php
>
> Die Seite sidounX.php verarbeitet den RequestURI dann etwa
> folgendermassen:
> $url = strip_tags( $_SERVER['REQUEST_URI'] );

Ah, jetzt hab ichs auch.. ok..

> Der Punkt muss noch escaped werden,
> oder? So:
> RewriteRule ^/([^/]*)/([^/]*)\.html$ /page.php?lang=$1&index=$2

Na klar.. Richtig.. Hab ich übersehen..

--
Gruß
hannes


--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Problem mit mod rewrite

Posted by Christoph Löffler <cl...@xtraport.de>.
Hallo,

Hannes Korte wrote:

>>Damit ich keine URLs der Form
>>   page.php?lang=de&index=47
>>habe, setze ich mod rewrite ein, das mir URLs der Form
>>   /de/47.html
>>in obiges umsetzt.
> 
> 
> ich werde aus deiner RewriteRule nicht so ganz schlau, 

meins:
RewriteRule \.(html)$ /sidounX.php

Die Seite sidounX.php verarbeitet den RequestURI dann etwa 
folgendermassen:

//2. if not, go ahead and check for dynamic content.
$url = strip_tags( $_SERVER['REQUEST_URI'] );
$url_array =  explode( "/", $url );
array_shift( $url_array ); //the first one is empty anyway

Dann habe ich in $url_array meine beiden Parameter.

 > ich würde das so
> machen:
> 
>   RewriteRule ^/([^/]*)/([^/]*).html$ /page.php?lang=$1&index=$2
> 
> Viel Erfolg!

Danke, ich werde das mal testen. Der Punkt muss noch escaped werden, 
oder? So:
RewriteRule ^/([^/]*)/([^/]*)\.html$ /page.php?lang=$1&index=$2
                              ^^

Grüße
Christoph
-- 
-------------------------------------------------------
*  Christoph Löffler - c.loeffler AT xtraport DOT de  *
*  xtraport IT Consulting     -      www.xtraport.de  *
*  Fingerprint: GnuPG                                 *
*  9082 0E53 50C1 209C 0E6F 4E3A 26F0 83F3 072B 44B0  *
-------------------------------------------------------

--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


RE: Problem mit mod rewrite

Posted by Hannes Korte <em...@hkorte.com>.
Hallo Christoph,

> Damit ich keine URLs der Form
>    page.php?lang=de&index=47
> habe, setze ich mod rewrite ein, das mir URLs der Form
>    /de/47.html
> in obiges umsetzt.

ich werde aus deiner RewriteRule nicht so ganz schlau, ich würde das so
machen:

  RewriteRule ^/([^/]*)/([^/]*).html$ /page.php?lang=$1&index=$2

Viel Erfolg!

--
Gruß
Hannes


--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------