2017-07-26 12 views
1

Ich bin ein Problem mit in PHP in Bezug auf die Umleitung, benutzte ich .htaccess dafür aber nicht gelungen , was ich habe, ist folgende 2 Urls:Redirect über .htaccess in php

http://localhost/PROJECT_NAME/USERNAME/348 

http://localhost/PROJECT_NAME/USERNAME 

Was ich möchte hier:

1), wenn Anfrage von

kam
http://localhost/PROJECT_NAME/USERNAME/111 

dann es gehen sollte:

http://localhost/PROJECT_NAME/index.php 

2) Wenn Anfrage von

kam
http://localhost/PROJECT_NAME/USERNAME 

dann sollte es gehen zu:

http://localhost/PROJECT_NAME/detail.php 

Was ich versucht:

RewriteRule /(\w+)$ detail.php?id=$1 [L] 
RewriteRule /(\w+)$ index.php [L] 
RewriteRule /$ detail.php?id=$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !index.php 
RewriteCond %{REQUEST_URI} !(.*)/$ 

Nicht erfolgreich ceed danach funktioniert es für den Index in Ordnung, aber nicht für Detailseite, Bitte helfen Jungs Dank für Ihre Zeit im Voraus

Randheer

Antwort

0

Sie haben ein paar Probleme hier. Erstens ist die Reihenfolge und Spezifität der Übereinstimmung.

Zuerst wird eine große gotcha für regex Lernenden:\w (Kurzschrift "Wort" Zeichenklasse) ist [A-Za-z0-9_] äquivalent. . . Beachten Sie die Ziffern und Unterstriche!

Unter der Annahme, dass alle IDs im letzten Fragment sind nur numerische und dass Benutzernamen alle einige Mischung aus Alpha sind, Numberic und/oder unterstreichen, kann man einfach die Reihenfolge der Anpassung ändern und verwenden Sie die \d (Ziffer) Zeichenklasse zuerst:

RewriteRule /(\d+)$ index.php [L] 
RewriteRule /(\w+)$ detail.php?id=$1 [L] 

Das sollte Ihre beiden Beispiele abdecken.

Sie haben keinen Anwendungsfall für die dritte Regel beschrieben, daher weiß ich nicht genau, auf welche URLs Sie das anwenden oder wie sie geändert werden müssen. Hier sind einige Beobachtung aber:

  1. Sie sollten die RewriteCond Linien vor legen die RewriteRule sie gelten. (Denken Sie daran, dass der Ausdruck der Rewrite-Regel zuerst geprüft wird, dann die Bedingungen.)
  2. Im Augenblick würde der Ausdruck RewriteRule mit allem übereinstimmen, was mit einem nachgestellten Schrägstrich endet, der keine echte Datei ist.
  3. Überprüfen Sie auch, dass es nicht index.php ist redundant zu !-f.Und da Sie mit einem nachgestellten Schrägstrich übereinstimmen, möchten Sie wahrscheinlich überprüfen, dass es kein Verzeichnis (versus Datei) ist, das
  4. verwendet. Der Ausdruck RewriteCond versucht, in einem negierten Ausdruck zu erfassen (so wird es nie etwas erfassen, oder Spiel für diese Angelegenheit, da die effektiven Expression ist das gleiche wie die in der Regel /$)

Wenn Sie einen Schrägstrich auf dem Benutzername oben zu ermöglichen, sind versucht, könnte man nur hinzufügen, was bereits ist dort:

RewriteRule /(\d+)$ index.php [L] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule /(\w+)/?$ detail.php?id=$1 [L] 

Wenn Ihr Anwendungsfall für die dritte Regel etwas anderes ist oder wenn diese RewriteCond Ausdrücke für eine andere Regel unterhalb der von Ihnen eingefügten waren, können Sie die Frage mit den Details bearbeiten und ich kann meine Antwort aktualisieren, um auch diesen Fall zu bearbeiten.

+0

Vielen Dank für Ihre Antwort. ich oben Option versucht, aber es hat nicht funktioniert das große Problem mit der folgenden URL ist: http: // localhost/PROJECT_NAME/NUTZERNAME es nicht Seite „detail.php“ –

+0

@RandheerSinghChouhan einige weniger Umleitung Dinge: 1. Funktioniert die andere Regel korrekt? Wenn nicht, erscheint 'RewriteEngine On 'vor diesen Zeilen? 2. Welche Version des obigen Codes hast du probiert? 3. In welchem ​​Pfad befindet sich diese .htaccess-Datei? Darüber hinaus sollte keine Umleitung innerhalb des Browsers mit diesen Regeln erfolgen - ihr Zweck besteht darin, * die Anforderung * neu zu schreiben, um die beabsichtigte Datei innerhalb von Apache anzuzeigen (transparent für den Benutzer). Wenn Sie eine clientseitige Umleitung (z. B. Antwortcode 301 oder 302) ausgeben möchten, müssen Sie das Flag "[R]" oder "[R = 301]" entsprechend verwenden. – justbeez