[PHP] Zmiana stylu GET w pasku adresu po submicie

0

Witam,

mam następujące pytanie, czy da radę w jakiś sposób zmienić styl stringa doklejanego do paska adresu przy submicie formularza?

Chodzi o to, że chciałbym, aby zamiast ?name=value&name2=value2, doklejane było name/value/name2/value2.

Robił może ktoś coś takiego?

1

To nie jest aż tak super proste jak zmiana jakichś ustawień.

Formularze nie wygenerują Ci przyjaznych URL-ów. Robi się to generalnie tak, że zwykły formularz albo jest przesyłany trybem POST (przez co URL strony w ogóle nie zawiera parametrów), albo i GET (przez co zawiera "brzydkie" parametry po znaku "?"), a następnie, skrypt odbierający formularz robi przekierowanie (korzystając z header('Location: ...')) na przyjazny adres URL. Inny skrypt PHP, lub nawet ten sam, odbiera żądanie z już przyjaznym ciągiem w URL-u i interpretuje ten ciąg (jest dostępny w $_SERVER['REQUEST_URI'] -- tam jest uri, a nie urL).

Żeby zrobić coś takiego, tj. żeby przyjazne URL-e przekierowywały na rzeczywiste pliki PHP, musisz odpowiednio skonfigurować plik .htaccess, korzystając z modułu mod_rewrite. Bo przyjazne URL-e to nie jest ścieżka/do/pliku.php?parametr1=wartosc, tylko raczej sciezka/do/pliku/parametr1/wartosc1. Musisz w .htaccess znajdować takie żądania i kierować je do odpowiednich plików PHP. Możesz wręcz kierować wszystkie żądania do jednego pliku index.php,który analizuje podany URL i dopiero wtedy dołącza odpowiedni plik PHP.

0

Dzięki za info.
Zastanawiałem się właśnie nad odbieraniem posta i następnie przekierowaniem użytkownika na przyjazny adres. Jednak nie byłem pewien czy nie ma lepszej metody.
Myślałem też o JS. Można by wczytać dane z forma i potem zastosować window.location, co prawda wtedy jest problem w momencie braku obsługi JS.

W takim bądź razie zabieram się za kodowanie ;)

0

@bieniomajster:
Tak, to rozwiązanie z JS też powinno działać. Problem jest taki, jaki mówisz: bez JS byłoby brzydko. No i musiałbyś i tak zadbać o to, żeby bez JS było brzydko, ale żeby było. Czyli: żeby skrypt po stronie serwera umiał przetwarzać też brzydkie URL-e. Bo jak nie, to np. roboty już by Ci się tam nie dobiły.

Obawiam się, że takie jaja mogłyby być problematyczne ze względu na SEO. Bo robot widziałby jeden URL (brzydki -- bo bez JS), a użytkownicy korzystaliby z drugiego (ładnego, bo większość ma JS). Przy niektórych (wielu?) formularzach SEO nie musi mieć jednak znaczenia, bo nawet nie chcesz żeby robot Ci to indeksował.

0

jeszcze mam jedno pytanie.
Mam problem z wyrażeniem regularnym w .htaccess

Chciałbym, aby pasek adresu po przekierowaniu wyglądał w taki sposób:
http://przyklad.pl/Categories/NazwaKategorii/3/Page/1/Sort/Price/0/

Wszystko ładnie się generuje przez skrypt. Zauważyłem, że po kolejnym sortowaniu adres nie pozostał taki jak trzeba. Dokładniej całość wyglądała tak:
http://przyklad.pl/Categories/NazwaKategorii/3/Page/1/Sort/Price/0/3/Page/1/Sort/Price/0/
Czyli powielane zostały '3/Page/1/Sort/Price/0/'.

Z ciekawości wypisałem sobie zmienne z geta poprzez:
echo $_GET['type'].$_GET['title'].$_GET['id'].$_GET['index'].$_GET['column'].$_GET['order'];

Z tego co pisałem powinienem dostać następujący wynik na ekranie: CategoriesNazwaKategorii3Price0
Otrzymuje:CategoriesNazwaKategorii/3/Page/1/Sort/Price01

Linia w htaccess:
RewriteRule ^Categories/([^-]+)/([^-]+)/Page/([^-]+)/Sort/([^-]+)/([^-]+)/$ Categories.php?type=Categories&title=$1&id=$2&index=$3&column=$4&order=$5 [L]

Wie ktoś może co robię źle?

// Edit:

echo 'Type: '.$type.'<br />Title: '.$title.'<br />ID: '.$id.'<br />Index: '.$index.'<br />Column: '.$column.'<br />Order: '.$order;
Zwraca:
Type: Categories
Title: NazwaKategorii/3/Page/1/Sort/Price
ID: 0
Index: 1
Column:
Order:

// Edit 2:
Heh... miałem problem w .htaccess związany z kolejnością linii... co za niefart :P

Konkretnie miałem następująco (zamiast odwrotnie):
RewriteRule Categories/([-]+)/([^-]+)/$ Categories.php?type=Categories&title=$1&id=$2&index=1 [L]
RewriteRule Categories/([-]+)/([-]+)/Page/([-]+)/Sort/([-]+)/([-]+)/$ Categories.php?type=Categories&title=$1&id=$2&index=$3&column=$4&order=$5 [L]

1 użytkowników online, w tym zalogowanych: 0, gości: 1