• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

modrewrite???

Animal21

Neues Mitglied
Hallo leute,
hoffe bin mit dem thema in der richtigen rubrik ^^

Wollte mich mal zum thema modrewrite etwas informieren...

Betreffende Website wist wie folgt aufgebaut:
- www.name.ext/content/index.php?site=home
- www.name.ext/content/index.php?site=profile
- www.name.ext/content/index.php?site=press
.
.
.

Folgendes wird nun gewünscht, unzwar, dass die seiten auch wie folgt erreichbar sind (auch wenn vll nur weiterletung...)
- www.name.ext/home
- www.name.ext/press
- www.name.ext/profile
.
.
.


ist das mit modrewrite möglich? bzw wie nutzt/integriert man das?
oder gibts vll noch eine alternative?
nur das system möcht ich nicht nochmal umstellen xD

mfg
ani
 
danke für die antwort...
hmm google ist dein freund ich weis ^^ sorry...

das ganze funktioiert fast ^^
(momentan alles noch local über xampp)
ich hab die .htaccess direkt im rootfolder meine page
bei localhost/name/press wird super weitergeletet an die localhost/name/content/index.php?site=press
aber bei allen andern seiten, bleibt es z.b. bei localhost/name/profile und es steht zwar der reine text drin, aber ohne jede formatierung durch css/js...

muss die .htaccess vll wo anders hin oder liegt es evtl. daran, dass es über xampp läuft?

mfg
ani

edit: dass bei 'press' alles richtig angezeigt wird, liegt nur daran, dass ich intern dann zu einer anderen unterseite weiterleite. ansonten wird auch kein css angezeigt...

edit2:also dass problem ist, dass die css- und js-datein nicht geladen werden können, da ich die normalerweise mit "../system/css/..." bzw. "../system/js/..." anspreche, aber durch das mod_rewrite bin ich ja eine ebene höher und ich müsste das "../" weglassen, aber dann funktionieren meine internen links nicht mehr : (
 
Zuletzt bearbeitet:
Du könntest die Dateien mit absolutem Pfad einbinden (als mit / am Anfang), dann spielt es keine Rolle, von welchen Unterverzeichnis sie aufgerufen werden.

Ich verwende gerne so etwas wie das hier:
Code:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php?page=$1
Damit lenke ich jede Anfrage auf mein CMS um und lasse das den Rest erledigen (unter Anderem die richtigen Pfade für CSS- und JS-Dateien bereitstellen - das hat den Vorteil dass ich selbst in diesen Dateien noch Änderungen vornehmen und Pfade anpassen kann).
 
- Front Controller pattern - Wikipedia, the free encyclopedia

Den GET-Parameter kannst du dir dann eigentlich auch noch sparen und gleich $_SERVER['REQUEST_URI'] auswerten, aber gut, egal. :D

- .htaccess problem - php.de

Es bietet sich immer an, zur Generierung interner URLs auf eine zentrale Funktion/Methode zu setzen. Änderungen sind dann sehr flexibel durchführbar.

Das habe ich hier so ab Post #18 umrissen, der restliche Thread ist aber in diesem Zusammenhang sicher auch interessant:

- PHP Webseite - XHTMLforum
 
irgendwie verwirrt mich die syntax, also das regexe un so... ^^

ok,
Code:
RewriteEngine On 
RewriteRule ^([a-zA-Z0-9_]+)$ content/index\.php?site=$1
läuft schonmal super, ich hab meine internen links noch angepasst...

nun hab ich noch 3 dinge, welche ich über den get-parameter übergebe:
...?view=xyz -> die views für die adminpage
...?lang=2 -> für die änderung der sprache
...?limit=6 -> fürs durchblättern der downloadseite
würd ungern auf post damit umsteigen...

gibts eine möglichkeit, dass die sache mit internenlinks so angegeben wird (domain.de/download?limit=24)
aber in der adresszeile, nur mit (domain.de/download), also dass im get-parameter trotzdem das limit steht.

muss keine endlösung sein, eine erläuterung der syntaxt, regexe... würde mir evtl. mehr helfen.

(muss sagen, dass die erklärungen im netz nich so hilftreich sind, recht kryptisch geschrieben... [finde ich])

mfg
ani

edit:
ich hab die presse abteilung ganz vergessen: es wär schön, wenn bei press das dann bei den einzelnen releases so aussehe: domain.de/press/2 bisher isses so: domain.de/press?pressID=2
 
Zuletzt bearbeitet:
gibts eine möglichkeit, dass die sache mit internenlinks so angegeben wird (domain.de/download?limit=24)
aber in der adresszeile, nur mit (domain.de/download), also dass im get-parameter trotzdem das limit steht.

Nein, was im URL nicht steht, steht nicht im URL, also auch nachher nicht in $_GET. Möglich wäre beispielsweise:

Code:
example.com/download/24
example.com/download/limit/24
example.com/download/-/limit/24
example.com/download/?limit=24
example.com/download?limit=24
...

Welches URL-Format du letztlich einsetzt, ist einerseits Geschmackssache, andererseits eine Frage dessen, wie deine Anwendung organisiert ist.

Siehe auch hier: http://www.html.de/server-apache-co/41012-url-rewrite-mit-mehreren-get-parametern.html
Oder wie gesagt vor allem hier: PHP Webseite - XHTMLforum
 
Du könntest, wie von mermshaus vorgeschlagen den $_SERVER['REQUEST_URI'] auswerten, aber den müsstest Du dann selbst in seine Teile zerlegen z.B. so:
Code:
$my_GET = explode('?',$_SERVER['REQUEST_URI']);
 if (!empty($my_GET[1])) {                      /* Erst mal schauen, ob es URL-Parameter gibt*/
    $my_GET = explode('&',$my_GET[1]);  /* Parameter zerlegen,*/
    foreach($my_GETas $get) {                 /* durch jeden durchgehen*/
        list($p,$v) = explode('=',$get);        /* und aufteilen in Parameter (p) und Value (v). */
        $$p = $v;                                      /* Schließlich einer Variablen, die den Namen des Parameters hat ($p) $v zuweisen.*/
 }   }
Bistimmt hab ich irgendwo einen Fehler eingebaut, aber so ähnlich könnte es funktionieren.

Oder Du versuchts es mit "Query String Attachment":
Code:
RewriteRule ^(.*) index.php?page=$1 [QSA]
Das soll dafür sorgen, dass die URL-Parameter mit angehängt werden (es funktioniert aber auch ohne QSA, wenn man das ? durch ein & ersetzt). Alledings müsstest Du in Deiner Regex wohl ergänzen dass & und = (sowie evtl. weitere Sonderzeichen, die Du in deinen Variablen verwendest) auch erlaubt sind.

Anhängen in weiterer Parameter in bei der Weiterleitung geht natürlich, dann brauchst Du allerdings eine Regel, welche "download"-Anfragen erkennt. Vielleicht fällt ja jemanden hier noch etwas dazu ein.
 
aber den müsstest Du dann selbst in seine Teile zerlegen

Zum Zerlegen bietet sich parse_url an. $_GET ist aber auch von sich aus gesetzt, das brauchst du nicht selbst zu füllen.

PHP:
var_dump(parse_url($_SERVER['REQUEST_URI']), $_GET);

Alledings müsstest Du in Deiner Regex wohl ergänzen dass & und = (sowie evtl. weitere Sonderzeichen, die Du in deinen Variablen verwendest) auch erlaubt sind.

In einer RewriteRule wird der Pfad ohne GET-Parameter geprüft. Soll Rewriting auf Basis von GET-Parametern geschehen, muss eine RewriteCond mit %{QUERY_STRING} ergänzt werden.
 
danke für die antworten...
ich hab mit QSA rumprobiert und klappt bisher ganz gut.
meine links sehen wie folgt aus und ich denke mit einem get-parameter lässt sich leben, wenn doch völle 'get-freiheit'-verlangt wird meld ich mich nochma ^^

domain.de
domain.de/home
domain.de/press?id=4
domain.de/download?limit=34
domain.de/profile?lang=2
domain.de/admin?view=login

desweiteren versuch ich mich durch das syntax un regex wirrwar zu suchen und es ein wenig besser zu beherrschen ^^

mfg
ani
 
Zurück
Oben