2011-01-12 8 views
4



Ich entwerfe meine Anwendung. Und ich sollte die nächsten Dinge machen. Alle GET-Parameter (? Var = value) sollten mit Hilfe von mod_rewrite in den/var/value transformiert werden. Wie kann ich das machen? Ich habe nur 1 .php Datei (index.php), weil ich das FrontController Muster benutze. Kannst du mir mit diesen mod_rewrite Regeln helfen?

Entschuldigung für mein Englisch. Vielen Dank im Voraus.PHP alle GET Parameter mit mod_rewrite

+4

, die für beide erschreckende Geräusche, die Sie und Ihre Benutzer. Im Allgemeinen ist es eine gute Idee, den Pfad so aussehen zu lassen, wie er Inhalt angibt, aber andere Parameter in Ruhe lassen. Zum Beispiel könnten Sie statt /content.php?id=5/content/5 haben. Wenn Sie jedoch eine Handvoll Optionen für etwas haben, sollten Sie etwas wie/content/5 tun? Opt1 = etwas & opt2 = etwas. – Brad

Antwort

6

Ich mache so etwas auf Websites, die 'seo-freundliche' URLs verwenden.

In .htaccess:

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* /index.php [L] 

Dann auf index.php:

if ($_SERVER['REQUEST_URI']=="/home") { 
    include ("home.php"); 
} 

Die .htaccess-Regel sagt es index.php zu laden, wenn die Datei oder das Verzeichnis gefragt wurde nicht gefunden. Dann parsen Sie einfach die Anfrage-URI, um zu entscheiden, was index.php tun soll.

+0

Schön. Genau das habe ich gebraucht. – Qix

1

AFAIK mod_rewrite behandelt keine Parameter nach dem Fragezeichen - regexp Zeilenende für Umschreibungsregeln entspricht dem Ende des Pfads vor dem '?'. Sie sind also ziemlich darauf beschränkt, die Parameter zu übergeben oder beim Umschreiben ganz zu löschen.

3

.htaccess

RewriteEngine On 

# generic: ?var=value 
# you can retrieve /something by looking at $_GET['something'] 
RewriteRule ^(.+)$ /?var=$1 

# but depending on your current links, you might 
# need to map everything out. Examples: 

# /users/1 
# to: ?p=users&userId=1 
RewriteRule ^users/([0-9]+)$ /?p=users&userId=$1 

# /articles/123/asc 
# to: ?p=articles&show=123&sort=asc 
RewriteRule ^articles/([0-9]+)/(asc|desc)$ /?p=articles&show=$1&sort=$2 

# you can add /? at the end to make a trailing slash work as well: 
# /something or /something/ 
# to: ?var=something 
RewriteRule ^(.+)/?$ /?var=$1

Der erste Teil ist die URL, die empfangen wird. Der zweite Teil der umgeschriebenen URL, die Sie mit $_GET auslesen können. Alles zwischen ( und ) wird als eine Variable angesehen. Die erste wird $1 sein, die zweite $2. Auf diese Weise können Sie genau bestimmen, wo die Variablen in die umgeschriebene URL gehen sollen und damit wissen, wie sie abgerufen werden.

Sie können es sehr allgemein halten und "alles" mit (.+) ermöglichen. Dies bedeutet einfach: eine oder mehrere (+) eines beliebigen Zeichens (.). Oder spezifischer sein und z.B. Nur Ziffern zulassen: [0-9]+ (ein oder mehrere Zeichen im Bereich von 0 bis 9). Sie können viele weitere Informationen zu regulären Ausdrücken unter http://www.regular-expressions.info/ finden. Und das ist ein guter Ort, um sie zu testen: http://gskinner.com/RegExr/.

5

Der folgende Code in Ihrem .htaccess wird Ihre URL von zB neu schreiben. /api?other=parameters&added=true zu /?api=true&other=parameters&added=true

RewriteRule ^api/   /index.php?api=true&%{QUERY_STRING} [L] 
+0

Genau das habe ich gesucht! Vielen Dank! – Aaron