To nie jest tak naprawdę kwestia estetyki, ale rzeczywiście różnica techniczna. Myślenie o tym w katalogu jest całkowicie poprawne i wyjaśnia wszystko. Sprawdźmy to:
Jesteś teraz w epoce kamienia łupanego lub wyświetlasz tylko statyczne strony
Masz stałą strukturę katalogów na swoim serwerze WWW i tylko pliki statyczne, takie jak obrazy, HTML itp. - Żadnych skryptów po stronie serwera ani żadnych innych.
Przeglądarka żąda /index.htm
, istnieje i jest dostarczana do klienta. Później masz wiele - powiedzmy - sprawdzonych filmów DVD i stronę html dla każdego z nich w /dvd/
katalogu. Teraz ktoś prosi /dvd/adams_apples.htm
i jest dostarczany, ponieważ on tam jest.
Pewnego dnia ktoś po prostu pyta /dvd/
- który jest katalogiem, a serwer próbuje dowiedzieć się, co dostarczyć. Oprócz ograniczeń dostępu i tak dalej istnieją dwie możliwości: pokazać użytkownikowi zawartości katalogów (założę się, że już to gdzieś widziałem) lub pokazać plik domyślny (w Apache jest: DirectoryIndex: sets the file that Apache will serve if a directory is requested.
)
Jak dotąd tak dobrze, jest to oczekiwany przypadek.Już pokazuje różnicę w obsłudze, więc przejdźmy do tego:
O 5:34 popełniłeś błąd podczas przesyłania plików
(Nawiasem mówiąc, jest to całkowicie zrozumiałe.) Więc zrobiłeś coś zupełnie nie tak i zamiast przesyłać /dvd/the_big_lebowski.htm
ten plik przesłałeś jako dvd
(bez rozszerzenia) do/
.
Ktoś dodał zakładkę do twojego /dvd/
katalogu (oczywiście, że nie chciałeś tworzyć i zawsze aktualizować tego sprytnegoindex.htm
) i odwiedza twoją stronę internetową. Zawartość katalogu jest dostarczana - wszystko w porządku.
Ktoś usłyszał o twojej liście i pisze /dvd
. A teraz jest przykręcony. Zamiast wykazu katalogu DVD serwer znajduje plik o tej nazwie i dostarcza plik Big Lebowski.
Więc usuwasz ten plik i każesz facetowi ponownie załadować stronę. Twój serwer szuka /dvd
pliku, ale go nie ma. Większość serwerów zauważy wtedy, że istnieje katalog o tej nazwie i powie klientowi, że to, czego szukał, jest rzeczywiście gdzie indziej. Odpowiedź najprawdopodobniej będzie następująca:
Status Code:301 Moved Permanently
z Location: http://[...]/dvd/
Całkowicie ignorując to , co ty myślisz o katalogach lub plikach, serwer może obsługiwać tylko takie rzeczy i - o ile nie powiedziano inaczej - decyduje o znaczeniu „slash or not”.
W końcu po otrzymaniu tej odpowiedzi klient ładuje się /dvd/
i wszystko jest w porządku.
Czy to w porządku? Nie.
„W porządku” nie jest dla ciebie wystarczająco dobre
Masz dynamiczną stronę, na której wszystko jest przekazywane /index.php
i przetwarzane. Do tej pory wszystko działało całkiem dobrze, ale wszystko zaczęło się spowalniać, a Ty badasz.
Wkrótce zauważysz, że /dvd/list
robi to dokładnie to samo: przekierowanie, na /dvd/list/
które jest następnie wewnętrznie tłumaczone index.php?controller=dvd&action=list
. Jedna dodatkowa prośba - ale jeszcze gorzej! customer/login
przekierowuje na customer/login/
które z kolei przekierowuje na adres URL HTTPS customer/login/
. W efekcie powstaje mnóstwo niepotrzebnych przekierowań HTTP (= dodatkowe żądania), które spowalniają działanie użytkownika.
Najprawdopodobniej masz tutaj również domyślny indeks katalogów: index.php?controller=dvd
bez action
wewnętrznego ładowania index.php?controller=dvd&action=list
.
Podsumowanie:
Jeśli się skończy /
, nigdy nie będzie plikiem. Bez zgadywania serwera.
Slash lub no slash mają zupełnie inne znaczenia. Istnieje różnica techniczna / związana z zasobami między „cięciem lub bez cięcia” i powinieneś być tego świadomy i odpowiednio go używać. Tylko dlatego, że serwer najprawdopodobniej ładuje /dvd/index.htm
- lub ładuje poprawne skrypty - kiedy mówisz /dvd
: Robi to, ale nie dlatego, że zrobiłeś właściwe żądanie. Co by było /dvd/
.
Pominięcie ukośnika, nawet jeśli naprawdę masz na myśli wersję ukośną, powoduje dodatkową karę za żądanie HTTP. Co jest zawsze złe (pomyśl o opóźnieniu na urządzeniach mobilnych) i ma większą wagę niż „ładny URL” - zwłaszcza, że roboty nie są tak głupie, jak wierzą SEO lub chcą, abyś uwierzył;)