2009-04-16 8 views
2

Obwohl .htaccess möchte ich/page/var1/var2 zu ./page.php?var1=var1 & var2 = var2 umleiten. Dies ist sehr einfach, aber ich möchte es so machen/Seite/var1 leitet auch um ./page.php?var1=var1 (ohne die var2). Die einzige Art, wie ich das tue ist:.htaccess Optionale Zeichen?

RewriteRule page/(.*)$ ./page.php?var1=$1 
RewriteRule page/(.*)/(.*)$ ./page.php?var1=$1&var2=$2 

Wie Sie es ist sehr überflüssig sehen können, und ich habe eine Tonne von Zeilen wie diese, so wird es sehr chaotisch. Irgendeine Möglichkeit, "optionale" Teile zu definieren?

Antwort

4

Der Ausdruck .* stimmt sowohl mit var1 als auch mit var1/var2 überein, daher wird die erste Regel auf beide angewendet.

Sie müssen also angeben, dass die erste Regel nur var1 entspricht. Dies kann durch Ersetzen von . (beliebiges Zeichen) durch [^/] (beliebiges Zeichen außer /) erfolgen. Also versuchen Sie dies:

RewriteRule ^page/([^/]+)$ ./page.php?var1=$1 
RewriteRule ^page/([^/]+)/([^/]+)$ ./page.php?var1=$1&var2=$2 

bearbeiten Sie können auch diese in eine Regel schreiben:

RewriteRule ^page/([^/]+)(/([^/]+))?$ ./page.php?var1=$1&var2=$3 
+0

Ich denke, mod_rewrite stoppt, wenn es eine Übereinstimmung findet, also solange ich die zwei vars eins vor dem einen var eins setze, wird es in Ordnung sein, aber danke für die heads-up. – Yifan

+0

DANKE! Das war genau das, wonach ich suchte. – Yifan

+0

+1 Vielen Dank dafür! Es funktioniert perfekt :) – Nathan

2

mod_rewrite ist nicht gut geeignet für solch schweres Heben, überlasse das deiner PHP App.

RewriteRule page/(.*)$ ./page.php?vars=$1 

und irgendwo in der Nähe von Anfang page.php:

<?php 
$vars = explode('/',$_GET['vars']); 

Voila, Sie eine Reihe von Ihrer Vars haben; Jetzt könnten Sie dort etwas bearbeiten, um zu sehen, was für Ihre App erforderlich/optional ist und entsprechend reagieren.

+0

Danke, so dass im Grunde ist es nicht möglich, es mit .htaccess zu tun? – Yifan

+0

Es ist möglich, aber wie Sie bereits herausgefunden haben, ist es nicht sehr praktisch. – Piskvor

1

Der beste Weg ist, einfach alles an Ihr PHP-Skript zu übergeben.

Ich schrieb einen Artikel über, wie man friendly URLs tut, das dieses im Detail abdeckt.