2016-05-04 15 views
2

Ich habe eine Website, die PHP verwendet. Es ist eine Site, die es jemandem erlaubt, eine Datenbank mit einem PHP GET-Aufruf zu durchsuchen. Dann zeigt es alle Elemente an, die zur Suche passen.ein PHP GET URL mit nginx Maskierung

Es gibt viele Suchfilter (Preis, Herkunft Standort, Kategorie). Dies ist, was die URL sieht aus wie nach einer Suche, wo der Benutzer „blaues Auto“ und „Dallas“ eingegeben

http://example.com/after_search.php?search_title=blue+cars&search_location=Dallas&price-0=index&price_max=&price_min=&category=every-cat&store=all&max_number=20

Gibt es eine Möglichkeit, dies wie aussehen zu lassen:

http://example.com/s/blue+cars/l/Dallas

ohne die GET-Funktionalität am Code-Ende zu ändern?

Ich habe auch JQuery auf der Site ausgeführt wird, wenn das etwas ist, das verwendet werden kann, um dies zu beheben.

HINWEIS: Ich bin mit nginx

EDIT 1

Angesichts der Beratung unten scheint eine nginx Frage zu sein.

Hier ist meine aktuelle/etc/nginx/sites-available/default file:

server { 
    listen 80 default_server; 
    listen [::]:80 default_server ipv6only=on; 

    root /usr/share/nginx/html; 
    index index.php index.html index.htm; 

    server_name server_domain_name_or_IP; 

    location/{ 
     try_files $uri $uri/ =404; 
    } 

    error_page 404 /404.html; 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 

    location ~ \.php$ { 
     try_files $uri =404; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 

} 

Als ich dies einfach vor dem letzten Add '}':

# nginx configuration 
location/{ 
if (!-e $request_filename){ 
rewrite ^(.*)$ /array_search.php?path=$1 break; 
} 
} 

Welche der nginx ist konvertierte Apache-Code, der in einer Antwort unten ist, scheint es keine Änderung zu verursachen.

Ich habe platziert auch den list(,$_GET['search_title'], $_GET['search_extra'], $_GET['search_location']) = explode('/',$_GET['path']); // Add more parameters as needed Code sowohl in dem Index und die after_search PHP-Dateien an der Spitze.

+0

Sorry, ich einen Tippfehler gemacht. Sie sollten den Teil ändern, der array_search.php zu after_search.php sagt. Dann gehe zu "http: // example.com/s/blue + cars/l/Dallas" und schau, ob es funktioniert. Sagen Sie mir, wenn Sie eine 404-Fehlermeldung sehen oder wenn es nach_search.php geladen wird. Um sicherzustellen, dass Ihre after_search.php die Wurzel Ihrer Website sein sollte. –

Antwort

3

Diese Antwort nimmt an Ihren Webserver läuft Apache und das Modul mod_rewrite aktiviert ist (in der Regel standardmäßig aktiviert)

Hier ist eine Möglichkeit, dass ich diesen Ansatz würde. Allerdings müssen Sie PHP-Code am Anfang Ihrer PHP-Datei hinzufügen (aber Sie sollten nichts anderes in Ihrer vorhandenen Implementierung ändern müssen)

Erstellen oder bearbeiten Sie zunächst eine .htaccess Datei an der gleichen Stelle wie after_search.php. Setzen Sie den folgenden Code in der .htaccess Datei:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /after_search.php?path=$1 [NC,L,QSA] 

Diese machen wird, so dass die URL http://example.com/s/blue+cars/l/Dallas wird http://example.com/after_search.php?path=s/blue+cars/l/Dallas hinter den Kulissen neu geschrieben werden (das heißt Menschen, noch http://example.com/s/blue+cars/l/Dallas sehen)

dann in Ihre PHP-Datei , dies tun:

<?php 
list(,$_GET['search_title'], $_GET['search_extra'], $_GET['search_location']) = explode('/',$_GET['path']); // Add more parameters as needed 

Dies wird die Bahnparameter aufgeteilt, die wir aus der .htaccess-Datei erstellt und die einzelnen Parameter auf den entsprechenden Schlüssel in dem $ _GET variablen zuweisen. Sie müssen dies nur einmal oben in Ihrer PHP-Datei tun, und Sie sollten nichts anderes berühren müssen.

Edit: lief ich die Apache-Konfiguration über die ".htaccess-Wandler nginx" und erhalten den folgenden Code für Nginx

# nginx configuration 
location/{ 
    if (!-e $request_filename){ 
     rewrite ^(.*)$ /after_search.php?path=$1 break; 
    } 
} 
+2

Danke für die Antwort, aber ich benutze nginx. – Romulus

+4

@Romulus http://winginx.com/de/htaccess – Phil