Mod_rewrite Wprowadzenie i ściągawka – Skrócone omówienie

Ujawnienie: Twoje wsparcie pomaga utrzymać działanie witryny! Pobieramy opłatę za polecenie niektórych usług, które zalecamy na tej stronie.


mod_rewrite jest częścią oprogramowania serwera WWW Apache działającego na komputerze twojego hosta. Umożliwia dynamiczną zmianę lub „przepisanie” adresu URL.

Zobaczysz mod_rewrite w akcji, jeśli używasz WordPressa z włączonymi „ładnymi” permalinkami. Domyślnie wszystkie strony WordPress są ładowane przy użyciu adresu URL zawierającego numer identyfikacyjny i ewentualnie inne zmienne, które informują WordPress, co należy załadować. Ale kiedy włączone są ładne permalinki, reguły mod_rewrite zmieniają te brzydkie zmienne w słowa. Czasami nazywamy powstałe adresy URL „czystymi”.

Przepisywanie przy użyciu mod_rewrite jest zasadniczo procesem tłumaczenia adresu URL z „brudnego” na „czysty” w locie. Odwiedzający nigdy nie widzi zmiany adresu URL na pasku adresu, ponieważ przetwarzanie jest obsługiwane przez Apache, zanim cokolwiek zostanie wysłane do przeglądarki użytkownika.

Zupełnie możliwe jest prowadzenie strony internetowej bez użycia mod_rewrite lub czystych adresów URL. Ale oto dlaczego większość ludzi go używa:

  • Aby ułatwić ludziom czytanie adresów URL. „Ładne” adresy URL są łatwiejsze do zapamiętania, łatwiejsze do pisania i łatwiejsze do odczytania na głos.
  • Ułatwienie wyszukiwarkom interpretacji adresów URL. Ładny adres URL mówi wyszukiwarce, o czym jest strona, ale nie jest to zbiór liczb identyfikacyjnych i zmiennych. Wyszukiwarki uwielbiają semantykę, więc przepisywanie adresu URL pomaga upewnić się, że strona jest poprawnie skategoryzowana i zindeksowana.
  • Aby tymczasowo utworzyć przekierowania z jednego pliku lub ścieżki do innego.

Komponowanie reguł Mod_rewrite

Jeśli korzystasz z Apache, powinieneś poprosić swojego hosta o włączenie mod_rewrite w pliku http.conf na swoim koncie. W wielu przypadkach mod_rewrite jest domyślnie włączony.

Następnie musisz utworzyć plik .htaccess w katalogu głównym konta hostingowego. Plik .htaccess kontroluje katalog główny i wszystkie znajdujące się pod nim pliki, chyba że zastąpisz go innym plikiem .htaccess w dolnej części drzewa folderów. Jeśli masz już plik .htaccess, wykonaj kopię zapasową przed kontynuowaniem.

Reguły przepisywania składają się z dwóch części. Pierwszy wiersz aktywuje dyrektywę przepisywania silnika w Apache. (Linia rozpoczynająca się od # jest komentarzem, który jest ignorowany.) Druga część instrukcji mod_rewrite mówi silnikowi przepisywania, w jaki sposób należy przekształcić adres URL. Podajemy więc warunek, a następnie mówimy Apache, co robić. Oto przykład reguły, która przekierowuje użytkownika z jednego pliku do drugiego.

# Włącz przepisywanie
RewriteEngine on
# Przekształć oldname.html w newname.html
RewriteRule ^ oldname.html $ newname.html

Ta reguła sprawdza plik o nazwie oldname.html (warunek). Jeśli znajdzie dopasowanie, dynamicznie zamienia je na newname.html. Użytkownik końcowy widzi zawartość oldname.html, ale widzi newname.html na pasku adresu URL przeglądarki. Jeśli mod_rewrite nie pasuje do oldname.html, reguła zostanie zignorowana.

Poszukuję wzorów

Utworzenie jednej reguły dla każdego adresu URL zajęłoby dużo czasu, dlatego musimy używać wyrażeń regularnych. Wyrażenia regularne szukają wzorców i zastępują jeden fragment łańcucha innym. Weź ten przykład:

# Włącz przepisywanie
RewriteEngine on
# Zmień autora / NAZWĘ / w autora.php? Id = NAZWA
RewriteRule ^ autor / ([a-z] +) /? $ Autor.php? Id = 1 $ [L]

W podziale, oto jak działa warunek ^ autor / ([a-z] +) /? $:

  • ^ jest początkiem reguły
  • autor / to ciąg, którego szukamy w oryginalnym adresie URL
  • ([a-z] +) to symbol wieloznaczny – szuka słów pojawiających się po autorze /
  • /? dodaje ukośnik na końcu adresu URL
  • $ oznacza koniec warunku.

A oto jak działa akcja autor.php? Id = 1 $:

  • autor.php? id = to ciąg, który chcemy zapisać
  • 1 USD jest symbolem zastępczym dla słów, które znaleźliśmy w powyższym stanie.

Na końcu reguły [L] jest flagą, która mówi Apache, aby przestał stosować więcej reguł, jeśli ta zostanie przetworzona.

To tylko bardzo prosty przykład tego, co może zrobić mod_rewrite. Zamiast pisać [a-z], możemy użyć [xyz], aby znaleźć litery x, y lub z, lub (y | n), aby znaleźć y lub n. Pełniejsze odniesienia do składni wyrażeń regularnych można znaleźć w poniższych zasobach.

Flagi RewriteRule

W powyższym przykładzie dodaliśmy flagę [L] na końcu reguły. Flagi są opcjonalne. Muszą być zawarte w jednym zestawie nawiasów kwadratowych na końcu linii, a jeśli chcesz użyć wielu flag, musisz umieścić przecinki między nimi.

Flagi można wypisać w całości lub w wersji skróconej. Podczas gdy obszar krótkich flag jest łatwiejszy do wpisania, używanie długich flag jest dobrym pomysłem, jeśli chcesz ułatwić czytanie kodu.

  • B: ucieka od znaków innych niż alfanumeryczne; może wymagać ustawienia AllowEncodedSlashes na On.
  • C lub łańcuch: łączy regułę z następną regułą w pliku .htaccess; drugi jest wykonywany tylko wtedy, gdy pierwszy kończy się meczem.
  • CO lub ciasteczko: utwórz ciasteczko, gdy reguła jest zgodna; wymaga dodatkowych atrybutów.
  • DPI lub discardpath: odrzuca PATH_INFO w przepisanym adresie URL.
  • E lub env: ustawia zmienną środowiskową.
  • END: podobnie jak w L, powoduje to zatrzymanie przetwarzania.
  • F lub zabronione: zwraca status 403 Zabronione z odpowiedzią na regułę.
  • G lub odszedł: zwraca status 410 Gone wraz z odpowiedzią na regułę.
  • H lub moduł obsługi: wymusza na regule użycie określonego modułu obsługi określonego jako zmienna.
  • L lub ostatni: zatrzymuje przetwarzanie reguł.
  • N lub next: ponownie uruchamia bieżący zestaw reguł, wykorzystując wynik reguły jako dane wejściowe.
  • NC lub nocase: wyłącza rozróżnianie wielkości liter dla reguły.
  • NE lub noescape: konwertuje znaki specjalne na odpowiadające im kody szesnastkowe.
  • NS lub nosubreq: przestaje być stosowane ponowne zapisywanie do zapytań podrzędnych.
  • P lub proxy: przekazuje wynik reguły do ​​mod_proxy i ignoruje pozostałe reguły.
  • PT lub passthrough: konwertuje ścieżkę pliku na adres URL.
  • QSA lub qsappend: łączy ciąg zapytania z nowym.
  • QSD lub qsdiscard: odrzuca stary ciąg zapytania i zastępuje go.
  • QSL lub qslast: dzieli ciąg zapytania na ostatni znak zapytania w ciągu.
  • R lub przekierowanie: wydaj przekierowanie HTTP.
  • S lub pomiń: pomija kilka zasad; należy zdefiniować jako [S = n], gdzie n to liczba reguł, które należy pominąć.
  • T or type: Ustawia typ MIME odpowiedzi reguły.

kupon hostingowy

Szukasz świetnej okazji na hosting mod_rewrite?
A2 Hosting zdobył pierwsze miejsce w naszych ostatnich testach prędkości. Obecnie możesz zaoszczędzić do 50% na planach przyjaznych dla programistów. Użyj tego linku zniżkowego
dostać ofertę.

Zmienne serwera

Poniższa lista zawiera wiele zmiennych serwera, z których niektóre będą mogły być używane z mod_rewrite. Nie wszystkie zmienne są obsługiwane przez wszystkie serwery, a zatem możesz być w stanie użyć zmiennych serwera niewymienionych tutaj.

Jeśli wiesz już o nagłówkach HTTP, wiele zmiennych serwera na tej liście będzie ci znanych, ale jest kilka, które są specjalnie przeznaczone do użycia z mod_rewrite.

  • WERSJA API: data wersji interfejsu API.
  • AUTH_TYPE: typ aut; zwraca NONE, BASIC, DIGEST lub FORM.
  • CONN_REMOTE_ADDR: adres IP peera.
  • CONTEXT_DOCUMENT_ROOT: informacje o mapowaniu katalogu w Apache.
  • CONTEXT_PREFIX: informacje o mapowaniu katalogu w Apache.
  • DOCUMENT_ROOT: bezwzględna ścieżka do dokumentu.
  • HANDLER: nazwa modułu obsługi.
  • HTTP_ACCEPT: nagłówek HTTP accept, jeśli występuje w nagłówku żądania HTTP.
  • HTTP_COOKIE: plik cookie, jeśli występuje w nagłówku żądania HTTP.
  • HTTP_FORWARDED: rzeczywista ścieżka, jeśli jest obecna w nagłówku żądania HTTP.
  • HTTP_HOST: bieżący serwer, jeśli jest obecny w nagłówku żądania HTTP.
  • HTTP_PROXY_CONNECTION: ścieżka proxy HTTP, jeśli jest obecna w nagłówku żądania HTTP.
  • HTTP_REFERER: URL strony odsyłającej.
  • HTTP_USER_AGENT: agent użytkownika użyty do uzyskania dostępu do strony.
  • HTTP2: czy połączenie używa HTTP2; zwraca ON lub OFF.
  • HTTPS: czy połączenie używa HTTPS; zwraca ON lub OFF.
  • IPV6: czy połączenie używa IPVS; zwraca ON lub OFF.
  • IS_SUBREQ: czy żądanie jest żądaniem częściowym; prawda czy fałsz.
  • PATH_INFO: dane ścieżki następujące po nazwie pliku.
  • QUERY_STRING: znaki w adresie URL po znaku zapytania.
  • REMOTE_ADDR: adres IP użytkownika.
  • REMOTE_HOST: pełna nazwa domeny użytkownika.
  • REMOTE_USER: nazwa użytkownika uwierzytelnionego użytkownika.
  • REMOTE_IDENT: nazwa użytkownika uwierzytelnionego użytkownika, zwrócona przez identd.
  • REQUEST_FILENAME: lokalna ścieżka do pliku lub skryptu w żądaniu.
  • REQUEST_METHOD: metoda żądania; HEAD, PUT, GET lub POST.
  • REQUEST_SCHEME: schemat w URI żądania.
  • REQUEST_URI: identyfikator URI żądania, jako ścieżka.
  • SCRIPT_FILENAME: bezwzględna ścieżka do skryptu.
  • SCRIPT_GROUP: nazwa grupy skryptów.
  • SCRIPT_USER: użytkownik będący właścicielem skryptu.
  • SERVER_ADDR: adres IP serwera, na którym zapisany jest plik .htaccess.
  • SERVER_ADMIN: administrator serwera skonfigurowany w Apache.
  • SERVER_NAME: nazwa serwera skonfigurowana w Apache.
  • SERVER_PORT: numer portu, na który wysłano żądanie.
  • SERVER_PROTOCOL: protokół i wersja żądania.
  • SERVER_SIGNATURE: wersja serwera i nazwa hosta.
  • SERVER_SOFTWARE: ciąg identyfikatora serwera.
  • WNIOSEK: żądanie w całości.
  • CZAS: data i godzina w formacie RRRRMMDDGGMMSS.
  • TIME_DAY: bieżący dzień.
  • TIME_HOUR: bieżąca godzina.
  • TIME_MIN: bieżąca minuta.
  • TIME_MON: bieżący miesiąc.
  • TIME_SEC: bieżąca sekunda.
  • TIME_WDAY: bieżący dzień, zwrócony jako liczba (od 0 w niedzielę).
  • TIME_YEAR: bieżący rok.

Zasoby

  • Przewodnik dla początkujących po Mod_rewrite: ten przewodnik pochodzi z 2004 roku, ale zapewnia dobre podstawy w zasadach mod_rewrite.
  • Przepisywanie adresów URL dla początkujących: kompleksowy przewodnik dla początkujących i średnio zaawansowanych użytkowników.
  • Apache Rewrite Cheatheet: wersja HTML ściągawki opublikowanej pierwotnie na iLoveJackDaniels.com.
  • Wprowadzenie do zaawansowanych wyrażeń regularnych: poszerz swoją wiedzę na temat wyrażeń regularnych za pomocą tego przewodnika.
  • RegEx Pal: sprawdź składnię wyrażeń regularnych przed wdrożeniem jej w witrynie.

Podsumowanie

mod_rewrite to użyteczny i wydajny sposób kontrolowania zachowania Apache. Za pomocą mod_rewrite możesz zrobić wiele rzeczy, których tutaj nie omówiliśmy. Obejmują one przekierowanie, zapobieganie łączeniu się z obrazami, blokowanie konkretnych użytkowników z Twojej witryny i wiele innych. Najlepszym sposobem na wykorzystanie mod_rewrite jest poznanie wyrażeń regularnych.

Dalsza lektura i zasoby

Mamy więcej przewodników, samouczków i infografik związanych z tworzeniem stron internetowych:

  • Wprowadzenie do PHP i zasoby: dowiedz się wszystkiego o najpopularniejszym języku zaplecza używanym w sieci.
  • Programowanie sieciowe z gniazdami internetowymi: dowiedz się wszystkiego o sieci w Internecie.
  • MySQL Wprowadzenie i zasoby: MySQL jest jedną z najpopularniejszych baz danych w Internecie.

Jak wybrać odpowiedni CMS

Nie wiesz, jakiego CMS chcesz użyć? Sprawdź nasz artykuł, jak wybrać odpowiedni CMS.

Najlepsza lista narzędzi dla webmasterów A-Z
Jak wybrać odpowiedni CMS

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map