Utwórz przekieruj i przepisuj reguły do .HTACCESS on Apache Webserver
- 578
- 123
- Roland Sokół
Podczas korzystania z serwera WWW Apache, .Htaccess
Pliki (zwane również „Pliki konfiguracyjne rozproszone”) są używane do określenia konfiguracji na podstawie recepty lub bardziej ogólnie do modyfikacji zachowania serwera WWW Apache bez konieczności bezpośredniego dostępu do plików hostów wirtualnych (jest to zwykle niemożliwe, na przykład, na przykład, na przykład niemożliwe, na wspólnych hostach). W tym samouczku widzimy, jak możemy ustanowić przekierowania adresu URL i przepisywać zasady w środku .Htaccess
akta.
W tym samouczku się nauczysz:
- Jak .Pliki Htaccess działają
- Jak skonfigurować zasady przepisywania adresu URL w .pliki htaccess za pomocą
Przepis
dyrektywa - Jak skonfigurować reguły przekierowania adresu URL w .pliki htaccess za pomocą
Przeadresować
IPrzekierowanie
dyrektywy
Zastosowane wymagania i konwencje oprogramowania
Kategoria | Wymagania, konwencje lub wersja oprogramowania |
---|---|
System | Niezależny dystrybucja |
Oprogramowanie | Apache Serwer WWW |
Inny | Żadne inne wymagania |
Konwencje | # - Wymaga, aby podane Linux -commands były wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda$-wymaga wykonania Linux-commands jako zwykłego niewidzianego użytkownika |
Powinieneś użyć .Pliki Htaccess?
Jak już wspomnieliśmy, użycie .Htaccess
Pliki nie są zalecane, jeśli możesz działać bezpośrednio na wirtualnych plikach konfiguracyjnych hosta, ponieważ zwalnia serwer WWW Apache (gdy Upewnienie
Dyrektywa służy do użycia .Htaccess
pliki, serwer WWW skanuje każdy wyszukiwany przez ich katalog). Jednak w niektórych sytuacjach użycie .Htaccess
Pliki to jedyne rozwiązanie.
Zestaw dyrektyw, które można użyć w .Htaccess
pliki są ustalane w głównej konfiguracji witryny za pośrednictwem Upewnienie
dyrektywa, wewnątrz zwrotka; Na przykład, aby umożliwić użycie wszystkich możliwych dyrektyw, napisalibyśmy coś takiego:
Zezwolenie na wszystko
Instrukcje zostaną zastosowane .Htaccess
Pliki znalezione w określonym katalogu i wszystkich jego podlokatoriach.
W przypadku dyrektyw, których użyjemy w tym samouczku do pracy, mod_alias I mod_rewrite Moduły Apache muszą być włączone.
Przekierowania (mod_alias)
Jak określono wcześniej, w naszym .Htaccess
Pliki możemy chcieć określić pewne reguły przekierowania, aby po żądaniu adresu URL klient został przekierowywany do innego.
Mamy w zasadzie dwa sposoby wykonania operacji: za pomocą Przeadresować albo Przekierowanie dyrektywy. Jaka jest różnica między nimi? Ten pierwszy pozwól nam przekierować oparte na prostych i prostych meczach URL; ten pierwszy robi w zasadzie to samo, ale jest silniejszy, ponieważ wraz z nim możemy użyć Wyrażenia regularne.
Dyrektywa „przekierowanie”
Zobaczmy kilka przykładów użycia przeadresować dyrektywa. Załóżmy, że chcemy przekierować całą naszą stronę:
Przekierować 301/https: // url/to/przekieruj/do
Ten powyżej jest dość „ekstremalnym” przykładem. Przeanalizujmy składnię. Jako pierwszą rzeczą określiliśmy dyrektywę: Przeadresować.
Drugą rzeczą, którą podaliśmy, jest kod HTTP, który ma być używany do przekierowania: można to zapewnić jako status liczbowy lub w formie ciągu.
Kilka przykładów:
Kod HTTP | Słowo kluczowe |
---|---|
301 | stały |
302 | Temp |
303 | Seeother |
410 | stracony |
W poprzednim przykładzie skonfigurowaliśmy stały przekierowanie, ponieważ użyliśmy 301
Kod HTTP. Odpowiednikiem tego byłoby:
Przekierować stałe/https: // url/to/przekieruj/do
Rodzaj przekierowania można całkowicie pominąć: gdy tak jest, 302
kod (tymczasowe przekierowanie) jest używany domyślnie.
Trzecim argumentem, który przedstawiliśmy w regule absolutny ścieżka „oryginalnego” zasobu, które należy dopasować. W tym przypadku użyliśmy /
który jest źródłem witryny, ponieważ chcemy ją całkowicie przekierować. Tutaj schemat I gospodarz część adresu URL musieć być pominięte.
Czwartym argumentem jest „nowy” adres URL, do którego powinien zostać przekierowany. W takim przypadku, jak to zrobiliśmy w powyższym przykładzie, możemy użyć pełnego adresu URL, w tym schemat I gospodarz, lub pomiń je i użyj tylko ścieżki: w tym drugim przypadku byłoby to uznane za część tej samej oryginalnej strony. Ten argument jest obowiązkowy, jeśli określony status przekierowania jest pomiędzy 301
I 399
, ale to należy pominąć Jeśli dostarczony status nie jest w tym zakresie. To ma sens: wyobraź sobie, że używamy 410
status sygnalizujący, że zasób zniknął: nie miałoby sensu określić adresu URL przekierowania. W takim przypadku po prostu napisalibyśmy:
Przekierować 410/ścieżka//zasob
Dyrektywa „przekierowanie”
Dzięki dyrektywie „Przekierowanie” możemy określić ścieżkę adresu URL do przekierowania, ale musi pasować do prostego i prostego, jak jest określona. Co jeśli chcemy wykonać coś bardziej złożonego, na przykład w celu przekierowania żądań wszystkich plików za pomocą .html
rozszerzenie? W takich przypadkach możemy użyć Przekierowanie dyrektywa i użyj Wyrażenie regularne. Zobaczmy przykład:
Przekierowanie 301 (.*) \.html $ 1 $.php
W powyższym przykładzie przekierowaliśmy wszystkie wnioski o .html
pliki na naszej stronie do plików o tej samej nazwie i ścieżce, ale z .php
rozszerzenie. Przeanalizujmy zasadę.
Jak zawsze pierwszą rzeczą, którą dostarczyliśmy, jest dyrektywa, w tym przypadku Przekierowanie. Następnie, tak jak wcześniej, dostarczyliśmy kod HTTP do użycia do przekierowania; Wtedy, i to jest interesująca rzecz, użyliśmy (.*) \.html $
Wyrażenie regularne.
Dla tych z was, którzy już znają Regex Powinno to być natychmiast jasne, ale zobaczmy, jak to działa: .
(kropka) w wyrażeniu regularnym pasuje do wszystkich znaków: następuje po nim *
które stwierdzają, że poprzednie wyrażenie powinno być dopasowane 0 lub więcej razy. Wyrażenie jest zamknięte w nawiasach, więc jest zgrupowane, a część adresu URL, która pasuje do niego, można odwoływać później przez 1 USD
zmienne (można użyć wielu grup - są one „nazywane” stopniowo, więc na przykład w celu dopasowania drugiej grupy, której możemy użyć 2 USD
). Po części wyrażenia zamkniętej w nawiasie określiliśmy, że ścieżka powinna się skończyć .html
: Widać, że uciekliśmy .
z odwrotną ilością
być dosłownie. Wreszcie użyliśmy $
Aby dopasować koniec linii.
Jako argument za adresem URL przekierowania 1 USD.php
. Jak już wyjaśniliśmy 1 USD
służy do odniesienia do części adresu URL, która pasowała do wyrażenia regularnego między nawiasem (czyli pełna ścieżka minus .html
rozszerzenie), więc to, co tu robimy .php
rozszerzenie.
Przepisywanie URL (mod_rewrite)
Reguły przepisywania URL mogą być oba przezroczysty lub widoczne przez użytkownika. W pierwszym przypadku użytkownik żąda strony, a serwer, wewnętrznie, tłumaczy żądanie w bazie dostarczonej reguły, aby obsłużyć zasób: użytkownik nie zauważa, co się dzieje, ponieważ adres URL w przeglądarce nie ma Tange. Zamiast tego w drugim przypadku praktycznie osiągamy całkowite przekierowanie widoczne przez użytkownika.
Zacznijmy od pierwszej sprawy. Jeśli chcemy użyć przepisywania adresów URL, pierwszą rzeczą, którą musimy zrobić (w tym przypadku w naszym .Htaccess
Plik) polega na napisaniu następującej dyrektywy:
RewriteEngine on
RewriteEngine Dyrektywa, jak sama nazwa wskazuje, jest potrzebna do zmodyfikowania stanu silnika Apache Rewrite. W powyższym przykładzie włączyliśmy to; Aby to wyłączyć, zamiast tego musimy napisać:
Przepisanie się
Jako przykład, załóżmy, że mamy zasób o nazwie strona.html
Na naszym serwerze, do którego dotarł zwykły i prosty adres URL: http: // localhost/strona.html
. Teraz wyobraź sobie, że z niektórych powodów przemianujemy na plik HTML, aby Nowa strona.html
, Ale z oczywistych powodów chcemy, aby nasi klienci nadal mogli dotrzeć do zasobu ze starym adresem URL (być może przechowywali je w swoich zakładkach przeglądarki). To, co moglibyśmy zrobić, to napisać następujące, bardzo
Prosta zasada:
RewriteEngine na rewriterule ^strona \.HTML /NewPage.html
Składnia reguły jest bardzo podobna do tej, której użyliśmy dla Przekierowanie
Dyrektywa: Najpierw mamy samą dyrektywę, Przepis
, niż mamy wzór używany do dopasowywania adresu URL: musi to być Regex. Po tym mamy podstawienie ciąg, który służy do wymiany oryginalnego adresu URL.
Istnieje czwarty element, który można użyć w definicji Przepis są flagi, które służą do modyfikacji zachowania serwera WWW, gdy dopasowana jest określona reguła.
Zobaczmy przykład: z regułą, którą ustaliliśmy powyżej, jak już powiedzieliśmy, nie nastąpi przekierowanie: URL w pasku adresu przeglądarki się nie zmienia. Jeśli chcemy, aby nastąpiło przekierowanie, musimy dodać R
flaga do wyrażenia:
RewriteEngine na rewriterule ^strona \.HTML /NewPage.html [r]
Flagi są dostarczane między nawiasami: w tym konkretnym przypadku R
Flaga powoduje interpretację zasady jako przekierowania. Możliwe jest nawet określenie rodzaju przekierowania, który powinien mieć miejsce, na przykład poprzez określenie powiązanego kodu HTTP:
Rewriterule ^strona \.HTML /NewPage.html [r = 301]
Kolejnymi powszechnymi rzeczami, do których przyzwyczai się przepisanie adresu URL, jest „upiększanie” adresów URL, do celów SEO. Powiedzmy, że na przykład mamy skrypt PHP, który pobiera z bazy danych określony produkt ID dostarczone jako parametr zapytania w
Na przykład adres URL:
http: // localhost/produkty.php?id = 1
Aby zasób udostępnił w http: // localhost/produkty/1
URL, moglibyśmy napisać następującą zasadę:
RewriteEngine na rewriterule ^produkty /([0-9]+) $ /produkty.php?ID = 1 USD
Z [0-9]
Regex, dopasowujemy wszystkie cyfry i z +
Mówimy, że poprzednie wyrażenie musi pasować 1 lub więcej razy Aby reguła została wykonana. Dopasowane wyrażenie jest zamknięte w nawiasach, więc możemy odwoływać się do dopasowanej części adresu URL w ciągu „docelowego”, używając 1 USD
zmienny. W ten sposób identyfikator produktu, który dostarczamy w „upiększonym” URL, staje się wartością ID
Zmienna w ciągu zapytania.
Przepisz warunki
Właśnie widzieliśmy, w jaki sposób, aby zastosować zasadę przepisywania, wyrażenie regularne musi pasować do adresu URL dostarczonego przez użytkownika. W ostatnim przykładzie widzieliśmy, jak http: // localhost/produkty/1
URL można przepisać wewnętrznie http: // localhost/produkty.php?id = 1
. Ale co, jeśli ścieżka określona przez nowy adres URL odnosi się do „prawdziwego” pliku istniejącego na serwerze? Co jeśli na przykład, /produkty/1
jest zwykłym plikiem i chcemy, aby był to służy? W takich przypadkach możemy użyć Przepisanie
dyrektywa.
Z Przepisanie
Dyrektywa, określamy warunek, który powinien być szanowany w przypadku przepisywania adresu URL. Na przykład w takim przypadku możemy chcieć ustalić, że jeśli Produkty/1
Plik istnieje na serwerze, przekierowanie
Nie powinno się odbyć. Napisalibyśmy:
RewriteEngine na przepisu %request_filename !-f Rewriterule ^produkty /([0-9]+) $ /produkty.php?ID = 1 USD
Używamy Przepisanie
dyrektywa przed Przepis
. Pierwszą rzeczą, którą przekazaliśmy do dyrektywy, jest ciąg testowy to należy dopasować. W tym kontekście możemy użyć serii predefiniowanych zmiennych serwerów, jak %Request_filename
:
Odwołuje się Pełna ścieżka lokalnego systemu plików do pliku lub skryptu pasująca do żądania.
Tutaj nie możemy podać pełnej listy wszystkich dostępnych zmiennych, które można znaleźć, odwiedzając dokumentację Apache mod_rewrite.
Po „ciągu testowym” określamy warunek, który należy dopasować: W tym przypadku użyliśmy !-F
Aby określić, że aby zastosować adres URL przepisania, plik lub skrypt dopasowywanie żądania nie powinno być zwykłym plik istniejącym na serwerze (-F
pasuje do zwykłego pliku i !
odwraca wynik).
Ten powyżej, jest naprawdę prostym przykładem Przepisanie
Dyrektywa: więcej niż jeden można dostarczyć przed Przepis
Dyrektywa: wszystkie z nich powinny pasować do zastosowania tego ostatniego.
Wnioski
W tym artykule zobaczyliśmy, jak możemy określić przekierowania adresu URL i przepisywać zasady przepisywania adresów URL .Htaccess
pliki podczas korzystania z serwera WWW Apache. Widzieliśmy bardzo łatwe przykłady użycia Przeadresować
, Przekierowanie
I Przepis
dyrektywy i jak możemy ich użyć do osiągnięcia określonych zachowań. Miało to na celu jako wprowadzenie do wspomnianych tematów, więc spójrz na oficjalne strony dokumentacji dla modułów mod_alias i modułów mod_rewrite dla bardziej dogłębnej wiedzy.
Powiązane samouczki Linux:
- OpenLitespeed Htaccess Confiet
- Włączać .Htaccess na serwerze Apache 2 Linux
- Jak zarządzać dynamicznymi wirtualnymi hostami z Apache i…
- Jak migrować Apache do Nginx, przekształcając wirtualne hosty na…
- Apache IP i oparte na nazwach wirtualne hosty
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Jak używać Apache do przekierowania całego ruchu z HTTP do HTTPS
- Jak skonfigurować VSFTPD na Debian
- Mastering Bash Script Loops
- Analizator logów Linux Apache
- « Jak zainstalować narzędzie do ekstrakcji danych rejestru rejestru w systemie Linux
- Bash Advanced zmienne idiomy do zarządzania czułością przypadków »