2016-06-08 12 views
0

ich eine kleine api zu schaffen versuchen, Ich habe einen Ordner mit dem Namen api in diesem Ordner Ich habe index.php und .htaccess Was ich versuche zu tun ist, wenn ich api/something am Zugriff auf den letzten Parameter zu transformieren zu api/?x=something Und in pHP überprüfen, ob Funktion something nennen existiert es, wenn keine Show 404..htaccess URL zu erhalten Parameter

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-s 
    RewriteRule ^(.*)$ index.php?x=$1 [QSA,NC,L] 

    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^(.*)$ index.php [QSA,NC,L] 

    RewriteCond %{REQUEST_FILENAME} -s 
    RewriteRule ^(.*)$ index.php [QSA,NC,L] 
</IfModule> 

wenn der Zugriff api Ordner funktioniert es aber, wenn ich api/something nicht hinzufügen.

Wenn es wichtig ist: die Struktur der Ordner ist wie folgt: root_website_folder/sub_folder/api Wenn es umschreibt ‚etwas‘ zu x=something bekomme ich die x func zu nennen, wenn Namen existieren

public function init(){ 
     $func = strtolower(trim(str_replace("/", "", $_REQUEST['x']))); 
     var_dump($func); 
     if((int)method_exists($this,$func) > 0){ 
      $this->$func(); 
     }else{ 
      $this->response('', 401); 
     } 
    } 
+0

Was genau passiert, wenn Sie Gehe zu **/api/etwas/**? – starkeen

+0

@starkeen es zeigt 404 – Froxz

+0

Können Sie klären, was Sie erwarten, wenn Sie zu '/ api /? X = etwas 'navigieren, sollte es weiter umgeschrieben werden? – apokryfos

Antwort

1

Sie haben nicht eine Regel speziell für die API hinzugefügt. Folgende Arbeiten sollten:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_URI} !^/api 
RewriteRule ^(.*)$ index.php?x=$1 [QSA,NC,L] 

RewriteRule ^api/(.*)$ api/index.php?x=$1 [QSA,NC,L] 

RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.*)$ index.php [QSA,NC,L] 

RewriteCond %{REQUEST_FILENAME} -s 
RewriteRule ^(.*)$ index.php [QSA,NC,L] 

Dies funktioniert durch Ausschließen/api Anfragen von der ^(.*)$ Regel erfasst werden.

Im Allgemeinen können Sie Ihre Rewrite-Regeln bei http://htaccess.mwl.be/ testen (nicht damit verbunden, finde ich es nur nützlich).

+0

Wenn Sie die URI **/api ** ausschließen dann wird die Regel nicht umschreiben **/api/etwas ** zu ** index.php ** – starkeen

+0

@apokryfos danke aber die gleiche Sache – Froxz

+0

@starkeen Ich muss die Frage falsch verstanden haben, ich dachte, das war die Absicht. Die Anfragen '/ api/something' lösen die zweite Regel aus. – apokryfos

0

können Sie verwenden die folgenden mit RewriteBase Richtlinie:

RewriteEngine On 
RewriteBase /api/  
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.+)$ index.php?x=$1 [QSA,L] 

Dies wird neu schreiben /api/etwas zu /api/index.php?x=something

Verwandte Themen