PHP $GET bei seitenwechsel

selberbauer

Captain
Registriert
Juni 2009
Beiträge
3.604
Hallo,
Ich schreibe gerade ein Übungsscript, welches eine HTML Seite generieren soll in dem es bsw. den head Bereich mittels "include" nur einmal einlesen muss.

Ich suche den HTML Code, welcher bei einem Klick in die Navigationsleiste folgendes macht:
Code:
$_GET[section] = 'contact'

Gruß
 
Zuletzt bearbeitet:
Ich hatte gerade noch deinen Beitrag vor dem edit da. Der war verständlicher als jetzt ;)

Du wolltest links die so lauten: <a href="foo.html">bar</a> auf index.php?page=foo umleiten.

Das geht mittels .htaccess

Informier dich mal über RewriteRule.
Ich habs jetzt nicht im Kopf wie es genau geht, aber einem Auszug aus dem Framework das ich benutze und weiterentwickle:

Code:
RewriteEngine on
#RewriteBase / 
RewriteRule (.*)\.(html|htm)$ index.php?page=$1&extension=$2 [QSA]

So, oder so ähnlich müsste es gehen ;-)
 
Ich hatte gerade noch deinen Beitrag vor dem edit da. Der war verständlicher als jetzt
Ich erlebe es manchmal, dass nur die ersten 3 Zeilen gelesen werden und langer Text gemieden wird ;)

Du wolltest links die so lauten: <a href="foo.html">bar</a> auf index.php?page=foo umleiten.
Genau ;)

Code:
RewriteEngine on
#RewriteBase / 
RewriteRule (.*)\.(html|htm)$ index.php?page=$1&extension=$2
Habe das in /srv/http/.htaccess rein kopiert, noch passiert nichts.
Was habe ich noch vergessen?
Ist das mit .htaccess der normale Weg?

Gruß
 
Die Datei muss dahin wo auch die index.php liegt und auf dem Server muss das rewrite_module aktiviert sein.

Das kannst du bei einem Apache server ganz einfach überprüfen:

Erstell eine php Datei (bsp: phpinfo.php) und kopier folgendes hinein:
Code:
<?php
phpinfo();
?>

dann öffnest du die Seite und schaust unter "Loaded Modules" ob "mod_rewrite" drinsteht.

Falls nicht musst es aktivieren.
dazu gehst du in die httpd.conf (XAMPPINSTALLDIR/apache/conf) und löschst das # von der Zeile
Code:
LoadModule rewrite_module modules/mod_rewrite.so

Speichern und fertig.
jetzt sollte es gehen. :)

Bei anderen Serverarten kenn ich mich leider nicht aus :(
 
Zuletzt bearbeitet: (schmarn erzählt...)
Danke für die ausführliche Anleitung. ;)
Habe ich so umgesetzt.


Ich denke ein weiteres Problem, warum es nicht funktioniert ist, dass Apache nicht weiß, dass er einen Klick auf den Navbar Link als "$_GET['section']" werten kann oder?
 
Also bei einem Klick auf den link <a href="foo.html">bar</a> lautet jetzt die url:

index.php?page=foo&extension=html

ansprechen kannst du das dann mit $_GET['page'] und $_GET['extension']

wenn du dein $_GET['section'] haben willst, musst du natürlich die Zeile
Code:
RewriteRule (.*)\.(html|htm)$ index.php?page=$1&extension=$2

in

Code:
RewriteRule (.*)\.(html|htm)$ index.php?section=$1&extension=$2

ändern ;)

Falls du extension nicht brauchst kannst du das auch weglassen und nur

Code:
RewriteRule (.*)\.(html|htm)$ index.php?section=$1

schreiben ;)
 
Tut mir leid, dass es immernoch nicht klappt :(
Irgendwas haben wir noch vergessen.
Das Modul ist geladen
Code:
Loaded Modules	core prefork http_core mod_so mod_authn_file mod_authn_dbm mod_authn_anon mod_authn_dbd mod_authn_default mod_authz_host mod_authz_groupfile mod_authz_user mod_authz_dbm mod_authz_owner mod_authnz_ldap mod_authz_default mod_auth_basic mod_auth_digest mod_file_cache mod_cache mod_disk_cache mod_mem_cache mod_dbd mod_dumpio mod_reqtimeout mod_ext_filter mod_include mod_filter mod_substitute mod_deflate util_ldap mod_log_config mod_log_forensic mod_logio mod_env mod_mime_magic mod_cern_meta mod_expires mod_headers mod_ident mod_usertrack mod_unique_id mod_setenvif mod_version mod_proxy mod_proxy_connect mod_proxy_ftp mod_proxy_http mod_proxy_scgi mod_proxy_ajp mod_proxy_balancer mod_ssl mod_mime mod_dav mod_status mod_autoindex mod_asis mod_info mod_suexec mod_cgi mod_cgid mod_dav_fs mod_vhost_alias mod_negotiation mod_dir mod_imagemap mod_actions mod_speling mod_userdir mod_alias mod_rewrite mod_php5

.htaccess habe ich auch so

trotzdem gibt Apache immer
Code:
Objekt nicht gefunden!

Der angeforderte URL konnte auf dem Server nicht gefunden werden. Der Link auf der verweisenden Seite scheint falsch oder nicht mehr aktuell zu sein. Bitte informieren Sie den Autor dieser Seite über den Fehler.

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.

Error 404

localhost
Sun Nov 20 09:50:21 2011
Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/1.0.0e DAV/2 PHP/5.3.8 with Suhosin-Patch

.htaccess befindet sich mit 777 Rechten in dem Verzeichnis wo die ganzen .php und .htmls sind.
Das Verzeichnis ist ein softlink zum Arbeitsverzeichnis, dass funktioniert an sich auch (habe following softlinks in der apache conf aktiviert)

Gruß

Kann es vielleicht daran liegen, dass ich einem softlink arbeite?
/srv
 
hm.

wie sieht denn die URL aus?

//EDIT 21.11. 13:09
Achso. Du arbeitest in dem Verzeichnis /srv?
Jetzt grad gesehen.

Du könntest mal versuchen die RewriteBase auf /srv zu setzen


EDIT 21.11 18:37
Also ich hab das grad nochmal zusammengebastelt.

Hab mir 3 Dateien erstellt: foo.html (die ist zum testen leer), index.php und .htaccess

die .htaccess sieht so aus:
Code:
RewriteEngine on
RewriteRule (.*)\.(html|htm)$ index.php?section=$1

und die index.php so:
(Wo die 5 da drin herkommt weiß ich nicht. Das Forum schreibt die automatisch rein. Die muss natürlich weg)
Code:
<?php
	error_reporting(E_ALL);
	echo 'GET:<br />';
	var_dump($_GET);
	echo '<br /><br />';
	echo 'section = ' . $_GET['section'] . '<br /> <br />';
?>

Wenn ich die foo.html aufrufe kommt die gewünschte Ausgabe:
Code:
GET:
array(1) { ["section"]=> string(3) "foo" } 

section = foo

:)
 
Zuletzt bearbeitet:
Hallo,
danke für die viele Arbeit ;)

Habe deine Dateien eingesetzt, wenn ich nun diese URL eingebe:
Code:
http://localhost/PHP/Homepage/index.php?section=downloads
dann bekomme ich:
Code:
GET:
array(1) { ["section"]=> string(9) "downloads" } 

section = downloads
Ohne section Angabe bekomme ich folgendes:
Code:
http://localhost/PHP/Homepage/index.php
GET:
array(0) { } 

section =


Habe allerdings gestern das Problem "provisorisch" (?) gelöst:
HTML:
<ul>
<li><a href="index.php?section=home">Home</a></li>
<li><a href="index.php?section=about_us">Über uns</a></li>
</ul>

Das funktioniert ganz schön, wie wird das "Seiten laden" eigentlich bei größeren Seiten gelöst?

Gruß
 
Zurück
Oben