"We are back" « oc.at

Fragen zu mod_rewrite

DJ_Cyberdance 10.03.2007 - 11:26 786 6
Posts

DJ_Cyberdance

Here to stay
Avatar
Registered: Jun 2002
Location: Vesterålen
Posts: 1838
Hab mich mal mit mod_rewrite auseinandergesetzt, aber es blieben trotz Doku-lesens noch ein paar Fragen offen, vielleicht könnt ihr mir weiterhelfen?

1.) mod_rewrite funktioniert nur, wenn ichs direkt im Config-file in /etc/apache/sites-available/xxx verwende, nicht aber in .htaccess. Hab gelesen, das würde mit der Option AllowOverride zusammenhängen, aber egal, wo ich das hinschreibe, die Rules in der .htaccess werden einfach ignoriert.

2.) Wenn ich /xyz.php?n zu /xyz/n machen möchte, funktioniert das wunderbar, aber alle Images und Stylesheets werden dann nicht gefunden, weli der server offenbar nach /xyz/style.css sucht statt nach /style.css. Klar, ich könnte den PHP- bzw. HTML-Code umschreiben, aber das will ich nicht...

3.) Gibts eine Möglichkeit, mod_rewrite mit MySQL zu verwenden? Beispiel, ich hab dynamisch gebastelte Seiten, die sich mit /page?id=25 aufrufen lassen. Diese Seite hat einen Titel, zB "Mein Titel", der in der entsprechenden MySQL-Table steht. Kann ich irgendwie eine URL /pages/Mein_Titel.html draus machen?

Danke schon mal für eure Tips!

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
ad 1) AllowOverride mußt du in der directory-config einstellen. Normalerweise kommt aber eine Fehlermeldung vom Apache, wenn man mod_rewrite dennoch im .htaccess aktiviert. Ist es vielleicht noch im .htaccess auskommentiert?

ad 2) weitere regel für .css mit dem parameter, daß alle nachfolgenden regeln ignoriert werden.

ad 3) nicht mit mod_rewrite, aber mit php

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25538
2.) könnte auch mit einem <base> im head des htmldokuments gelöst werden. ich würde jedoch persönlich alle resourcen absolut ansprechen, zB: /img/pr0n.gif

dafür benötigst du natürlich eine regel, die überprüft ob das file existiert. wenn es das tut, dann sollten die rewrite regeln übersprungen werden.

falls du eine größere webanwendung hast dann sollten die endungen auf keinen fall eine instanz deiner anwendung erstellen (also ein php-skript ausführen), falls diese nicht existieren, das könnte zB bei typos vorkommen - /imhg/pr0n.gif. dafür würdest du dann eine extra regel brauchen, die besagte endungen ausschliesst.

DJ_Cyberdance

Here to stay
Avatar
Registered: Jun 2002
Location: Vesterålen
Posts: 1838
Zitat von mat
2.) könnte auch mit einem <base> im head des htmldokuments gelöst werden. ich würde jedoch persönlich alle resourcen absolut ansprechen, zB: /img/pr0n.gif

dafür benötigst du natürlich eine regel, die überprüft ob das file existiert. wenn es das tut, dann sollten die rewrite regeln übersprungen werden.

falls du eine größere webanwendung hast dann sollten die endungen auf keinen fall eine instanz deiner anwendung erstellen (also ein php-skript ausführen), falls diese nicht existieren, das könnte zB bei typos vorkommen - /imhg/pr0n.gif. dafür würdest du dann eine extra regel brauchen, die besagte endungen ausschliesst.

Ich hab zwei Verzeichnisse, in dem einen sind alle Graphiken, die zum Layout der Seite gehören, im anderen alle Graphiken, die ein Anwender raufladen kann und die dynamisch eingebunden werden. Erstere werden mit einem <img>-tag eingebunden, die anderen über ein php-script mit readfile gelesen...

Wie würde so eine Regel aussehen? Hast Du ein Beispiel?

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25538
Code:
        RewriteCond /var/www/yourhttpdir%{REQUEST_FILENAME} -d [OR]
        RewriteCond /var/www/yourhttpdir%{REQUEST_FILENAME} -f [OR]
        RewriteCond %{REQUEST_FILENAME} /(.*)\.(gif|jp?g|png|ico|pdf|js|css) [OR]
        RewriteCond %{REQUEST_FILENAME} /index.htm* [NC]
        RewriteRule .* - [L]
und zuletzt dann natürlich die einbindung des phpcodes:
Code:
RewriteRule ^\/(.*) /index.php?link=$1 [L]

malu

Big d00d
Avatar
Registered: Aug 2005
Location: vienna/ooe
Posts: 206
hi leute!

hab momentan mit dem selben problem zu kämpfen:
Hab die urls von rezept_azeigen.php?id=123 umgeschrieben auf
/123/schnitzel.html :)

funktioniert auch ganz gut, nur ist dann wie bei DJ_Cyberdance der Pfad für die Bilder und das Stylesheet im Unterordner /123/ gesucht... :/

habs auch bereits mit dem RewriteRules von mat probiert... funzt aber leider nicht :S

meine .htaccess sieht atm so aus:
Code: PHP
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} /(.*)\.(gif|jp?g|png|ico|pdf|js|css) [OR]
RewriteCond %{REQUEST_FILENAME} /index.htm* [NC]
RewriteRule .* - [L]

RewriteCond %{REQUEST_URI} ^/rezepte/([0-9]+)/(.*)\.html
RewriteRule (.*) rezept_anzeigen.php?gericht_id=%1 [NC,L]

komm einfach nicht dahinter... :rolleyes:

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25538
sprichst du die files absolut an oder benutzt du <base>?

du darst nicht vergessen, dass /rezepte/.. für apache der aktuelle ordner ist.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz