2008-08-16 21 views
5

Widzę często (przepisane) adresy URL bez identyfikatora, tak jak w niektórych instalacjach wordpress. Jaki jest najlepszy sposób na osiągnięcie tego? Przykład: site.com/product/some-product-name/ Może zachowywać tablicę nazw stron i identyfikatorów w pamięci podręcznej, aby uniknąć zapytania DB na każde żądanie strony? Jak uniknąć konfliktów i innych problemów związanych z używaniem adresów URL bez identyfikatorów?Adres URL bez identyfikatora

Odpowiedz

3

Używanie identyfikatora przedstawia tę samą zagadkę, naprawdę - sprawdzasz po prostu inną wartość w bazie danych. Część "twojego produktu" pod powyższym adresem URL również jest czymś wyjątkowym. Niektórzy nazywają je ślimakami (Wordpress, również permalinkami). Dlatego zamiast sprawdzać bazę danych dla wiersza, który ma określony identyfikator, wyszukujesz bazę danych dla wiersza, który ma określony błąd. Nie musisz znać identyfikatora, aby pobrać rekord.

1

Dopóki nazwy produktów są unikatowe, nie powinno to stanowić problemu. Nie będzie już dłużej (przynajmniej nie znacząca) wyszukiwanie produktu według unikalnej nazwy niż identyfikator numeryczny, dopóki kolumna jest indeksowana.

+0

Cóż, zajmie to znacznie dłużej, ale wciąż jest wystarczająco szybki, aby go nie obchodzić. –

1

Wordpress ma pole w tabeli wp_posts dla ślimaka. Kiedy tworzysz post, tworzy on ślimak z tytułu postu (jeśli tak masz skonfigurowany), zastępując spacje myślnikami (lub myślę, że możesz ustawić je na podkreślenia). Wyciąga również apostrofy, przecinki i inne. Sądzę, że ogranicza to również całkowitą długość pocisku.

Krótko mówiąc, nie jest to dynamiczne dekodowanie adresu URL w tytule wpisu - w tabeli znajduje się pole odpowiadające bezpośrednio wersji URL nazwy wpisu.

1

Jak wiadomo, adresy URL są ponownie pisane za pomocą modułu Apache o nazwie mod_rewrite. Jak już wspomniano, Wordpress w tle przypisuje ślimak po oczyszczeniu tytułu lub nazwy postu.

Ale, aby odpowiedzieć na twoje pytanie, to, co opisujesz, to funkcja "Pretty Permalinks" Wordpressa i możesz dowiedzieć się więcej na ten temat w Wordpress codex. Nowsze wersje WordPressa wewnętrznie przepisują (nie .htaccess editin, wp_rewrite). Dlatego zobaczysz ten sam zestaw reguł dla dowolnej struktury permalinka.

Chociaż, jeśli wykonujesz jakieś kopanie, możesz znaleźć stare zasady przepisywania. Na przykład:

RewriteRule ^([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index.php?year=$1&monthnum=$2&day=$3 [QSA,L] 

zajmie URL jak /2008/01/01/ i skierować ją do /index.php?year=2008&monthnum=01&day=01 (i załadować kategorię date).

Jednak, jak wspomniano, strona jak product-name istnieje tylko bo Wordpress już odkażane tytuł posta i przechowywać go jako pole w bazie danych.

Powiązane problemy