Umgebungsvariable von mod_rewrite speichern bei Redirekt=301
maggi
- cgi
0 Cheatah
Ich rufe HTML Seiten auf, die den gleichen Text, aber unterschiedliche Gestaltung haben, mit statischen url`s auf.
/template_color-N.html
Google wird das als duplikated Content ansehen, deshalb soll eine RewriteRule daraus /template.shtml machen und eine Umgebungsvariable soll gesetzt werden
und dem nachfolgenden script den Parameter color-N bereitstellen.
Momentan werden die Umgebungsvariablen übergeben an eine (s)html Seite und darin wird mit include virtual ein cgi script aufgerufen.
Das wird mit mod_rewrite ok umgesetzt - überprüfbar durch RewriteLog und in /template.shtml durch <!--#printenv -->:
RewriteRule ^/2/template_([^_]+).html$ /2/template.html [E=BBBB:$2,L]
Wenn die url umgeschrieben wird auf die kürzere /template.html durch [R=301]
RewriteRule ^/2/template_([^_]+).html$ /2/$template.html [E=BBBB:$2,L,R=301]
dann werden die Umgebungsvariablen zwar laut RewriteLog noch gesetzt, aber nicht weitergegeben, dh nicht in in /template.shtml durch <!--#printenv --> ausgedruckt.
Liegt das daran, dass durch den Rewrite=301 Vorgang prinzipiell was neues mit anderen Umgebungsvariablen gestartet wird?
Wie könnte ich das Vorhandensein von Umgebungsvariablen sonst noch mit einem Aufruf mittels Konsole testen - es wären dann ja 2 Prozesse - die sehe ich aber nicht mit ps.
Kann man mod_rewrite oder Apache dazu bringen die variablen zwischenzuspeichern?
Könnte ich dazu Variablen "zulassen" bei der Kompilierung?
Danke, Maggi
Hi,
Liegt das daran, dass durch den Rewrite=301 Vorgang prinzipiell was neues mit anderen Umgebungsvariablen gestartet wird?
Status 301 bedeutet, dass der Redirect über den Client geschickt wird, welcher seinerseits einen völlig neuen, vom vorherigen (weitgehend) unabhängigen Request startet. Insbesondere ist es kein serverinterner Redirect; der Client erfährt die neue URL (und im Prinzip auch _nur_ die).
Wie könnte ich das Vorhandensein von Umgebungsvariablen sonst noch mit einem Aufruf mittels Konsole testen - es wären dann ja 2 Prozesse - die sehe ich aber nicht mit ps.
Du kannst mit Telnet jeden einzelnen Request nachvollziehen. Beispiel:
"""
shell> telnet dein.server 80
[...]
GET / HTTP/1.1
Host: dein.server
"""
Leerzeile nicht vergessen.
Kann man mod_rewrite oder Apache dazu bringen die variablen zwischenzuspeichern?
HTTP ist zustandslos. Der nachfolgende Request basiert auf nichts, was dem Server dann noch bekannt wäre.
Cheatah