Hübsche URL über htaccess mit einer beliebigen Anzahl von Parametern

8

Eigentlich habe ich diese URL:

%Vor%

Aber ich möchte dieses URL-Format haben:

%Vor%

Also geht der "Kontakt" zur Variablen $_GET["site"] und der Rest der Parameter sollte über $_GET["param1"] , $_GET["param2"] usw. erreichbar sein. Das Problem ist, dass es mit einer beliebigen Anzahl von Parametern arbeiten muss (könnte sein param4 oder sogar param50 oder irgendein anderer Name des Parameters). Ist es über htaccess möglich, all diese Fälle abzudecken?

    
Manny 19.03.2016, 14:56
quelle

5 Antworten

1

Dies ist völlig machbar mit etwas kreativem htaccess und PHP. Effektiv, was Sie hier tun, ist Apache angewiesen, alle Seitenanforderungen an index.php zu richten, wenn sie nicht für eine echte Datei oder ein Verzeichnis auf dem Server sind ...

%Vor%

Danach müssen Sie nur noch in PHP gehen und mit dem $_SERVER['REQUEST_URI'] superglobal auf die vollständige vom Benutzer angeforderte URL-Struktur zugreifen und sie dann mit explode("/", $_SERVER['REQUEST_URI']) in ein Array aufteilen.

Ich verwende dies derzeit auf einer Reihe meiner Sites, wobei alle Sites von index.php bedient werden, aber mit URL-Strukturen wie ...

Ссылка

wird dann vom explode-Befehl verarbeitet, um in einem Array als ... zu erscheinen. 0=>"forums", 1=>"11824-some-topic-name",2=>"reply"

    
Chris Rutherfurd 02.04.2016, 00:05
quelle
7

Mod_rewrite hat maximal 10 Variablen, die es senden kann:

RewriteRule-Rückwärtsreferenzen : Dies sind Rückreferenzen der Form $ N (0 & lt; = N & lt; = 9), die Zugriff auf die gruppierten Teile (in Klammern) des Musters von der RewriteRule bereitstellen, die der aktuellen Menge von RewriteCond-Bedingungen unterliegt. mod_rewrite Handbuch

also, was Sie wünschen, ist nur mit htaccess nicht möglich. Eine gängige Methode besteht darin, alles in eine Datei umzuschreiben und diese Datei auf folgende Weise bestimmen zu lassen:

.htaccess

%Vor%

index.php

%Vor%     
Garytje 01.04.2016 14:07
quelle
4

Garytjes Antwort ist fast richtig.

Tatsächlich können Sie mit htaccess only erreichen, was Sie wollen, auch wenn dies normalerweise nicht für diesen Zweck verwendet wird.

In der Tat wäre es natürlicher, die Logik an ein Skript zu delegieren. Aber wenn Sie es wirklich mit mod_rewrite machen wollen, gibt es viele Techniken, um das gleiche Verhalten zu simulieren. Zum Beispiel ist hier ein Beispiel für eine Problemumgehung:

%Vor%

In Ihrem anfänglichen Beispiel wird /contact/param1:value1/param2:value2/param3:value3 zuerst in /contact/param2:value2/param3:value3?param1=value1 umgeschrieben. Dann wird mod_rewrite wieder übereinstimmen und es in /contact/param3:value3?param1=value1&param2=value2 umschreiben. Und so weiter, bis nach key:value kein Paar /contact/ mehr gefunden wird. Schließlich wird es in /index.php?site=contact&param1=value1&param2=value2&param3=value3 umgeschrieben.

Diese Technik ermöglicht es Ihnen, eine Anzahl von Parametern größer als 9 zu haben, ohne durch mod_rewrite eingeschränkt zu sein. Sie können es als eine Schleife sehen, die Schritt für Schritt die URL liest. Aber auch dies ist vielleicht nicht die beste Idee, htaccess only zu diesem Zweck zu verwenden.

    
Justin Iurman 04.04.2016 14:24
quelle
-1

Versuchen Sie das ..

.htaccess

%Vor%

index.php

%Vor%     
Anil Kumar 06.04.2016 05:16
quelle
-3

Dies ist machbar mit nur htaccess mit etwas in der Art von ...

%Vor%

([a-zA-Z0-9] +) stimmt mit alphanumerischen Strings überein. : {1} entspricht 1 Doppelpunkt.

Von dort aus wird wahrscheinlich eine Erweiterung basierend auf seltsamen URLs erforderlich sein.

    
Adam Davies 19.03.2016 15:07
quelle

Tags und Links