w mojej aplikacji MVC staram się właśnie "uprzyjaźnić" przyjazne URLe. Obecnie aplikacja działa na takiej zasadzie, że wszystkie żądania przekierowywane są przez plik .htaccess do pliku bootstrap o nazwie index.php. Nie wnikając w szczegóły - po wywołaniu żądania w pliku index.php inicjalizowany jest m.in. obiekt router, który rozbija adres URL na odpowiednie części i przekazuje je do Front controllera. Przyjęta przeze mnie konwencja urli wygląda tak:
Kod
http://domena.com/module/controller/action/params
Przy czym moduł to odpowiedni katalog na serwerze, zawierający oddzielne pliki kontrolerów i widoków (może być np. moduł publiczny oraz moduł administracyjny), kontroler i akcja to wiadomo, a parametry oddzielone są separatorem, określonym przy tworzeniu obiektu routera.
Czyli przykładowy url wygląda u mnie tak:
Kod
http://domena.com/public/articles/display/id=5
Mimo wszystko wydaje mi się to średnio "friendly", bardziej podoba mi się np. konwencja, jaka jest na stronie głównej php.pl, gdzie po wybraniu artykułu, w URL pojawia się jego przetworzona nazwa (a nie tak jak u mnie identyfikator) oraz kategoria, do której artykuł należy.
W związku mam kilka pytań:
1. W jaki sposób określić na podstawie takiego URLa, jaki artykuł ma być pobrany z bazy. To znaczy: w przypadku ID jest to proste, porównuje się go np. z kluczem głównym bazy. A w tym przypadku nie można tego porównać z tytułem artykułu przechowywanym w bazie, ponieważ wygląda zwykle inaczej (zawiera spacje, polskie znaki, znaki specjalne). Jedynym sposobem wydaje mi się utworzenie dodatkowej kolumny w tabeli z artykułami, przechowującej ten tekstowy identyfikator, ale czy tak to działa?
2. W jaki sposób zrobiony jest taki podział na kategorie (np. domena.com/artykuly/kategoria/nazwa_artykulu) i czy to w ogóle ma sens, skoro i tak nazwa artykułu jest unikatowa?
3. Na niektórych stronach widziałem dodane do tej nazwy artykułu w URLu rozszerzenie .html. Jaki jest cel dodawania tego rozszerzenia? Jest to tylko po to, żeby zmylić użytkownika, czy treść jest generowana dynamicznie, czy statycznie?
4. Czy polskie nazwy np. kontrolerów w adresach (np. domena.com/artykuly/dodaj) to efekt zastosowania jakichś aliasów, czy po prostu tak rzeczywiście nazwane są ich klasy (pytam, bo IMO dziwne wydaje mi się nazwanie pliku ArtykulyController, a w nim metoda DodajAction()).