2017-12-29 64 views
0

Ich habe derzeit die an .htaccess (unten enthalten), die wunderbar funktioniert. Es nimmt einen Benutzer auf die Seite content.php und zeigt ihnen die Seite, die in der Datenbank gespeichert ist. Allerdings gibt es einige Seiten, auf denen ich hartcodieren musste und die mit der Erweiterung .php aufgelistet sind. Gibt es eine Möglichkeit, eine Rewrite-Regel hinzuzufügen, die es mir ermöglicht, die Erweiterung zu entfernen und die Abfragezeichenfolge als Verzeichnisse zu senden..htaccess neu schreiben, um Erweiterung und Abfragezeichenfolge zu entfernen und in Ordnerstruktur zu machen, aber wenn Seite nicht existiert, sende an eine andere Seite

Beispiel

Aktuell: http://www.example.com/dashboard.php?ax=clients&do=save&miscthirdparam=doitnow

An: http://www.example.com/dashboard/clients/save/doitnow/

Wenn jedoch die dashboard.php Seite nicht vorhanden ist, dann schicken Sie es einfach content.php Wie jetzt, um zu überprüfen, ob eine Seite in der Datenbank angezeigt wird? (Ich habe einen Fehler 404 zeigen, wenn es keine Seite in der Datenbank gibt).

** My Aktuelle .htaccess **

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^([a-zA-Z]*)/(.*)$ /content.php?url=$1/$2 [L] 
    Options +FollowSymLinks 
    RewriteEngine on 
</IfModule> 
<IfModule !mod_rewrite.c> 
    ErrorDocument 404 /content.php?err=404 
</IfModule> 

Antwort

0

können Sie RewriteCond backreference verwenden. Wir können den ersten URL-Pfad extrahieren und herausfinden, ob die PHP-Datei existiert. Bei Ihrem Beispiel extrahieren wir dashboard und prüfen, ob die Datei %{DOCUMENT_ROOT}/dashboard.php existiert. Wenn ja, schreiben Sie die URL mit den angegebenen Parametern neu. Der Regex [^/]* stimmt mit allen Zeichen überein, gefolgt von einem Schrägstrich /.

RewriteCond %{REQUEST_URI} ^/([^/]*) 
RewriteCond %{DOCUMENT_ROOT}/%1.php -f 
RewriteRule ^([^/]*)(/([^/]*))?(/([^/]*))?(/([^/]*))? /$1.php?ax=$3&do=$5&miscthirdparam=$7 [L] 
+0

Wo würde das gehen, so dass, wenn die Datei nicht existiert es auf content.php zurückfällt? Ich habe versucht, es an verschiedenen Orten zu platzieren, scheint aber nirgends zu funktionieren. :) –

+0

können Sie einfügen, kurz vor dem ersten 'RewriteCond' – Ben

+0

Ich habe das getan, aber wenn ich versuche zu besuchen sagen www.example.com/dashboard/, die zu www.example.com/dashboard.php gehen soll, geht es einfach zu /content.php und zeigt den 404 an, weil die Seite nicht in der Datenbank ist. –

Verwandte Themen