Schrift
[thread]800[/thread]

CGI::Application: Suchmaschinenfreundliche URL

Leser: 1


<< >> 10 Einträge, 1 Seite
MartinR
 2006-08-19 19:30
#8565 #8565
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
HI,

ich versuche mich gerade an einer Website mittels CGI::Application. Nun werden ja normalerweise URL-Parameter in einer nicht suchmaschinenfreundlichen Version übergeben
Code: (dl )
/cgi-bin/test.pl?A1=B1;A2=B2


Ich möchte nun die URL-Übergabe in folgender Form gestalten:

Code: (dl )
/verzeichnis/A1-B1/A2-B2/


Dazu verwende ich mod_rewrite in folgender Form

Code: (dl )
1
2
3
4
Options +SymLinksIfOwnerMatch
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*)$ /cgi-bin/test.pl?$1


Und im init-Bereich meiner App dann folgendes:

Code: (dl )
1
2
3
4
5
6
7
my $RedirectQueryString = $ENV{REDIRECT_QUERY_STRING};
my @AlleParameterPaare = split('/', $RedirectQueryString);

foreach my $ParameterPaar (@AlleParameterPaare) {
my @ParameterPaarTeil = split('-', $ParameterPaar);
$self->query->param("$ParameterPaarTeil[0]" => $ParameterPaarTeil[1]);
}


Nun meine Frage: Ist mein Gedankengang bis hier hin OK (funktionieren tut es ja) oder gibt es "bessere" Lösungen?
pktm
 2006-08-19 20:10
#8566 #8566
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ob die anderen Möglichkeiten besser sind weis ich nicht, aber es gibt immerhin noch welche.
Schau einfach mal hier rein: http://cgiapp.erlbaum.net/ wobei du besonders dem Bereich Plugins Aufmerksamkeit widmen solltest.
Am ehesten würde ich jetzt mal für CGI-Application-Dispatch plädieren.

EDIT: Da fällt mir noch gerade ein: bei mod_rewrite hast du immer die unschönen URLs im Browser stehen. Bei Dispatch nicht.

Grüße, pktm\n\n

<!--EDIT|pktm|1156003994-->
http://www.intergastro-service.de (mein erstes CMS :) )
MartinR
 2006-08-19 21:26
#8567 #8567
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
[quote=pktm,19.08.2006, 18:10]EDIT: Da fällt mir noch gerade ein: bei mod_rewrite hast du immer die unschönen URLs im Browser stehen. Bei Dispatch nicht.[/quote]
Hi,

Danke schon mal.

Aber ich habe keine unschönen URL im Browser stehen. Da steht dann eben http://www.domain.de/test....5;maus. Oder findest Du die unschön?

Werd mir aber trotzdem mal Dispatch ansehen. Wobei es mir beim Drüberfliegen eher nach Bahnhof klingt ...
topeg
 2006-08-20 01:41
#8568 #8568
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Es geht auch so:
Code: (dl )
my %options=$ENV{"PATH_INFO"}=~m|/(\w+)-(\w+)|gs;

Zumindest funktioniert das bei mir gut (Apache,thttpd,IIS).

ach ja der Aufruf ist wie du es wünschst:
Code: (dl )
script_name/A1-B1/A2-B2

in %options steht dann drin:
Code: (dl )
1
2
$options{A1}="B1";
$options{A2}="B2";
\n\n

<!--EDIT|topeg|1156024509-->
pktm
 2006-08-20 04:35
#8569 #8569
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
[quote=pktm,19.08.2006, 18:10]Ob die anderen Möglichkeiten besser sind weis ich nicht, aber es gibt immerhin noch welche.
Schau einfach mal hier rein: http://cgiapp.erlbaum.net/ wobei du besonders dem Bereich Plugins Aufmerksamkeit widmen solltest.
Am ehesten würde ich jetzt mal für CGI-Application-Dispatch plädieren.

EDIT: Da fällt mir noch gerade ein: bei mod_rewrite hast du immer die unschönen URLs im Browser stehen. Bei Dispatch nicht.

Grüße, pktm[/quote]
RewriteRule (.*)$ /cgi-bin/test.pl?$1 gibt bei dir keine andere URL im Browser?
http://www.intergastro-service.de (mein erstes CMS :) )
MartinR
 2006-08-20 13:02
#8570 #8570
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
[quote=pktm,20.08.2006, 02:35]RewriteRule (.*)$ /cgi-bin/test.pl?$1 gibt bei dir keine andere URL im Browser?[/quote]
@topeg: Danke, werde ich mal ausprobieren

Ah, dann rufe ich mein Script also direkt auf ohne den Umweg über mod_rewrite. Ob das wohl einen miniminimalen Zeitgewinn bzw. miniminimal niedrigere Serverlast ergiebt?

@pktm: Nun, ich erzeuge grundsätzlich auch gar keine "unschönen" URLs. Mein mod_rewrite ist ja auch im Prinzip nur eine Weiterleitung (und keine Umschreibung) die alles was nach dem aufgerufenen Verzeichnises in dem URL drin steht als Parameter an mein cgi-script übergibt.

Die einzelnen Websites werden bei mir über Templates mit HTC erzeugt. Und dort stehen dann auch die Suchmaschinenfreundlichen Links drin.

Edit: topegs Vorschlag ausprobiert\n\n

<!--EDIT|MartinR|1156065496-->
Strat
 2006-08-20 14:35
#8571 #8571
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
RewriteRule (.*)$ /cgi-bin/test.pl?$1

wuerde ich nicht verwenden, sondern eher sowas wie
Code: (dl )
RewriteRule /application/(.*)$ /cgi-bin/test.pl?$1

weil damit das laden von Bildern/CSS/JS/... einfacher ist und nicht ueber das script gemacht werden muss (apache kann das einfach besser) oder ueber einen weiteren virtual host
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
MartinR
 2006-08-20 14:39
#8572 #8572
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Hallo Strat,

danke für die Antwort. Aber die htaccess mit dem mod_rewrite liegt bei mir direkt im Verzeichnis /mein_verzeichnis/ und nicht im root. Somit werden die Images, JS und CSS ganz normal eingebunden und nur Zugriffe auf o.g. Verzeichnis umgeschrieben.\n\n

<!--EDIT|MartinR|1156070413-->
dewarim
 2006-08-22 11:05
#8573 #8573
User since
2006-03-31
4 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wenn du keine umfangreichen Parameterlisten übergeben willst, geht es vielleicht auch ohne manuelles Parsen der Parameter:

Code: (dl )
1
2
3
RewriteRule ^/wms/([^/]+)/([^/]+)$ /cgi-bin/show.pl?area=$1;page=$2 [L]
RewriteRule ^/wms$ /cgi-bin/show.pl?area=home;page=index.html [L]
RewriteRule ^/wms/([^/]+)/?$ /cgi-bin/show.pl?area=$1;page=index.html [L]


URLs der Form /wms/arbeit/status.html werden also in
Code: (dl )
/cgi-bin/show.pl?area=arbeit;page=status.html

umgesetzt (aber im Browser steht nach wie vor die "schöne" URL). Das funktioniert gut für Seiten, bei denen die Applikation mehr oder weniger nur den Dateinamen braucht.

Zugegeben, für die Kommentarseiten habe ich noch keine Lösung gesucht...bei
Code: (dl )
cgi-bin/show.pl?area=arbeit;page=status.html;show_comments=1

ist wohl eine etwas komplexere Version gefragt. :)
MartinR
 2006-08-22 21:26
#8574 #8574
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Danke für die Antwort. Aber von der mod_rewrite-Lösung bin ich weg gegangen, da ich daran gescheitert bin auf unterschiedliche Anzahl (nicht jeder Link baut sich bei mir gleich auf) an Parametern entsprechend zu reagieren.
<< >> 10 Einträge, 1 Seite



View all threads created 2006-08-19 19:30.