Używam htaccess do czyszczenia adresu URL, następująca reguła dotyczy strony profilu
RewriteRule ^([0-9a-z]+)$ profile.php?user=$1
ale mam inne strony, takie jak obserwujący, obserwujący zalogowanego użytkownika, który może zobaczyć ich obserwujących na /followers
strona i reguła jest taka
RewriteRule ^following$ follow.php?follow=following
RewriteRule ^followers$ follow.php?follow=followers
ale kiedy idę /followers
Zostaję przekierowany do profile.php
(pierwsza reguła powyżej), jak widać w pierwszej regule wszystko po nazwie domeny localhost/text_that_comes_here
idzie do profile.php
jakie może być rozwiązanie, aby moje /followers
a inne strony zostaną poprawnie przekierowane.
Odpowiedzi:
1 dla odpowiedzi № 1Powinieneś umieścić bardziej szczegółowe reguły przed bardziej ogólnymi.
W takim przypadku zasady ^following$
i ^followers$
są bardziej szczegółowe niż ^([0-9a-z]+)$
...
Co spowoduje, że „przestrzeganie” i „obserwujący” zostaną złapane przez pierwszą regułę ^([0-9a-z]+)$
, a zatem przekierowanie do profile.php
Zmiana kolejności pliku .htaccess w następujący sposób powinna załatwić sprawę:
RewriteRule ^following$ follow.php?follow=following
RewriteRule ^followers$ follow.php?follow=followers
RewriteRule ^([0-9a-z]+)$ profile.php?user=$1
Edytować: aby odpowiedzieć na twój komentarz, oto metoda, której możesz użyć, aby zrobić to programowo:
* Jest to jednak rodzaj włamania i nie użyłbym tego jako stałej poprawki.
Ponieważ przekieruje do profile.php?user=following
(lub profile.php?user=followers
), możesz dodać warunek na początku profile.php
stronę i sprawdź, czy parametr $_GET["user"]="following"
(lub „obserwujący”). Coś jak:
if ($_GET["user"]="following" || $_GET["user"]="followers") {
$_GET["follow"]=$_GET["user"]; //set the parameter required in “follow.php”
include("follow.php");
exit;
}
Oznacza to, że nie będzie można nazwać żadnego użytkownika following
lub follower
, co i tak nie powinno się zdarzyć… ale nadal.