Utwórz przekieruj i przepisuj reguły do .HTACCESS on Apache Webserver

Utwórz przekieruj i przepisuj reguły do .HTACCESS on Apache Webserver

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ć I Przekierowanie dyrektywy
Utwórz przekieruj i przepisuj reguły do .HTACCESS on Apache Webserver

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
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 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