/ / Regex przekierowuje stronę na niechcianą stronę - regex, apache, .htaccess, przepisywanie adresów URL

Regex przekierowuje stronę na niechcianą stronę - regex, apache, .htaccess, przepisywanie adresu URL

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 № 1

Powinieneś 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.