Installerer mod omskriving. Aktiver Mod-omskrivingsmodulen i Apache

Denne Apache-nettservermodulen er utviklet for å konvertere kilde-URL-er. Dens muligheter er enorme, men den brukes ofte til å lage CNC (Human Readable URL). Hva betyr det. I stedet for å bruke http://example.com/2005/12 / 31/theme.html Denne mekanismen brukes veldig ofte på nyhetssider. Samtidig er dette et pluss for sikkerheten. Brukere ser ikke hvilken fil (skript) som faktisk blir åpnet.

La oss se på noen spørsmål nedenfor:
1. Hvordan aktivere mod_rewrite på Apache?
2. Litt teori. Hvordan mod_rewrite fungerer.
3. Et enkelt eksempel.
4. Hva bør gjøres i manuset?
5. Hva gir denne tilnærmingen og mod_rewrite generelt?
6. Mulige feil.
7. Alma Mater for å lære mod_rewrite

1. Hvordan aktivere mod_rewrite på Apache?

For å aktivere mod_rewrite på Apache-nettserveren, må du redigere httpd.conf-filen.
For å gjøre dette, åpne httpd.conf-filen, se etter linjen:

Koden
#LoadModule rewrite_module modules/mod_rewrite.so

Og fjern kommentaren

Koden
LoadModule rewrite_module modules/mod_rewrite.so

Deretter starter vi webserveren på nytt.

2. Litt teori. Hvordan mod_rewrite fungerer.

Som regel forstår ikke programmerere som nettopp har møtt mod_rewrite helt hvordan denne mekanismen fungerer. På grunn av dette har de i lang tid puslet over «barnslige feil.

Så. Som vi vet er det en såkalt GET-forespørsel, dvs. http://example.com/2005/12/31/theme.html , som "kommer" til nettserveren (i vårt eksempel, Apache). Hva gjør serveren. Først av alt ser han på innstillingene til denne verten. Så bestemmer han seg for hva han skal gjøre videre. Send enten tilbake innholdet på hovedsiden (for eksempel index.html) til brukeren, eller send index.php header-skriptkoden for tolkning, eller returner en 404-feil osv. osv. La oss anta at vi vil fortsette å jobbe med index.phtml. Hva som vil skje neste, vet du sikkert allerede. Vi vil fokusere på øyeblikket når serveren ser på vertsinnstillingene. Det kan være et stort antall av dem. Men uten feil prøver serveren å finne .htaccess-filen i roten. (Apache-konfigurasjonsfil på farten). Det er i denne filen mod_rewrite-transformasjonsreglene er plassert (de kan også finnes i httpd.conf). De. Jeg sier stadig at URL-konvertering gjøres FØR skript fungerer.

Algoritmen er følgende:
1. Serveren mottar en GET-forespørsel: http://example.com/2005/12/31/theme.html
2. Finner mod_rewrite-transformasjonsregler i .htaccess.
3. Transformers.
4. Omdirigerer til index.phtml i henhold til konverteringsreglene.
5. Skriptet begynner å fungere.

3. Et enkelt eksempel.

Mange av dere har sett denne tingen: http://example.com/2005/12/31/theme.html . Slike adresser brukes ofte av nyhetssider. Naturligvis har de ikke alle disse mappene og html-filene. Alle data behandles av scriptet. Nedenfor vurderer vi et av alternativene for en slik transformasjon. Jeg skal fortelle deg det med en gang. Det er mange alternativer, jeg tar bare ett spesielt tilfelle, som jeg selv bruker og anser det som det mest universelle.

Koden
Omskriv motor på
Alternativer +FølgSymlinks
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ index.phtml

La oss vurdere alt i orden.
To påfølgende RewriteCond er forhold som det er en OG mellom.
De. Hvis den forespurte adressen ikke er en ekte fil eller katalog, omdirigerer du til index.phtml. De. Derfor innså vi at våre forespørsler til http://example.com/2005/12/31/theme.html vil bli behandlet av index.phtml-skriptet. Nå er hele spørsmålet hvordan vi finner ut i skriptet at brukeren ber om /2005/12/31/theme.html.

Det er en lyrisk vri her. Noen få ord om RewrtiterRule. Direktivet vurderer en parameter. Den første (i vårt tilfelle: ^(.*)$) er en streng med regulære uttrykk som sjekker om den forespurte adressen (i vårt tilfelle: /2005/12/31/theme.html) samsvarer med mønsteret (i vårt tilfelle, ja, dvs. j. mønsteret sier: "enhver tegn 0 eller flere ganger" fra begynnelsen til slutten av strengen - ^(.*)$). Hvis mønsteret er tilfredsstilt, omdirigerer mod_rewrite forespørselen til filen spesifisert i den andre parameteren (i vårt tilfelle: index.phtml).

Nå er hele spørsmålet hvordan vet skriptet om "/2005/12/31/theme.html". Det er to alternativer.
Først:

Koden
RewriteRule ^(.*)$ index.phtml?$1 [L]

Der "/2005/12/31/theme.html" vil bli sendt til index.phtml-skriptet i QUERY_STRING-variabelen, fordi $1 er den første parentesen i mønsteret, som tilsvarer: http://example.com/?/2005/12/31/theme.html . Men har du sett dette noe sted? Nei. Derfor bruker vi QSA som nøkkel.

Det er en servervariabel (som skript har tilgang til) REQUEST_URI som alltid inneholder en GET-forespørsel ("/2005/12/31/theme.html"). Så hvis vi omdirigerer til index.phtml, bør REQUEST_URI få verdien av index.phtml, MEN QSA-nøkkelen erstatter den med "/2005/12/31/theme.html". De. vi omdirigerer fysisk til index.phtml og viser logisk skriptet som brukeren åpnet "/2005/12/31/theme.html".

4. Lage et manus

Vi jobber nå med index.phtml, skriptet vi omdirigerte til. Jeg sier med en gang, koden er i PHP, fordi Jeg er ikke god i andre språk for nettet.

Så enkelt er det. Nå kan du operere på denne matrisen. For å gjøre det enda tydeligere. Jeg skal gi deg en analogi. La oss si at nettadressen er: http://example.com/index.phtml?year=2005&m...y=31&news=theme . Som vi vet, i skriptet, vil disse parameterne være tilgjengelige gjennom $_GET-matrisen.
så, $_GET['år'] er det samme som $arr, $_GET['month'] er det samme som $arr, $_GET['day'] er det samme som $arr, $_GET ['tema' ] er det samme som $arr (må bare kutte av ".html" også).

5. Hva gir denne tilnærmingen og mod_rewrite generelt?

For det første, for søkemotorer, er en URL som: http://example.com/?/2005/12/31/theme.html mye mer behagelig enn http://example.com/index.phtml?year=2005&m. .. y=31&news=theme , og for brukere er du også enig.

Andre øyeblikk. Med mod_rewrite er muligheten for et XSS-angrep praktisk talt eliminert, siden include bug er praktisk talt overlappet. I dette eksemplet er ikke dette så synlig, men ta mitt ord for det, det er det. Men i alle fall kommer det an på hodet ditt!!!

Det tredje punktet er skjulet av teknologien som faktisk brukes. dette kompliserer delvis hackingen av nettstedet, men dette er bare den øvre grensen, som gjørme på en stillestående dam.

6. Mulige feil

Vanligvis kan følgende feil oppstå:

404 - Dokument ikke funnet. Årsak: RewriteRule-regler utløses ikke.
403 - Forbudt - tilgang nektet. Omskrivingsreglene inneholder en logisk feil som oppstår på grunn av et forsøk på å omdirigere til en fil hvor det ikke er tilgang (/index.php - det vil gi akkurat dette, fordi / i UNIX-systemer betyr banen fra SERVER-rotkatalogen, der du har naturligvis tilgang vil ikke).
500 – Intern serverfeil. Årsaken er en syntaksfeil i .htaccess-filen.

7. Alma Mater for å lære mod_rewrite

Personlig har denne artikkelen hjulpet meg mye. Her er abstraktet hennes, og nedenfor legger jeg ved en ZIP-fil. Den inneholder denne artikkelen i RTF-format,

Sitat
"Den største fordelen som mod_rewrite gir deg er konfigurerbarheten og fleksibiliteten som ligger i Sendmail. Ulempen med mod_rewrite er konfigurerbarheten og fleksibiliteten som ligger i Sendmail."

Brian Behlendorf

Apache-gruppen
"Til tross for tonnevis av eksempler og dokumentasjon, er mod_rewrite Voodoo. Jammen kul voodoo, men fortsatt voodoo."

Brian Moore
[e-postbeskyttet]

Velkommen til verden av mod_rewrite, den sveitsiske kniven for URL-omskrivinger!
Denne modulen bruker en regelbasert motor (en parser basert på regulære uttrykk) for direkte URL-transformasjoner. Den støtter et ubegrenset antall regler og et ubegrenset antall forhold knyttet til regelen for å implementere en virkelig fleksibel og kraftig mekanisme for URL-transformasjoner. Transformerings-URLer kan avhenge av ulike kriterier, for eksempel servervariabler, miljøvariabler, HTTP-hoder, tidsstempler og til og med eksterne databaseforespørsler i forskjellige formater kan brukes for å virkelig matche forventningene dine til konverterte URL-er.

Denne modulen opererer på fullstendige URL-er (inkludert baneinformasjon) i både serverkontekst (httpd.conf) og katalogkontekst (.htaccess) og kan til og med generere spørringsstrengdeler som et resultat. Det konverterte resultatet kan føre til at forespørselen blir behandlet internt, omdirigert eksternt eller til og med sendt gjennom en intern proxy-modul.

Imidlertid kommer all denne funksjonaliteten og fleksibiliteten med en ulempe: kompleksitet. Så ikke forvent å forstå hele denne modulen på én dag.
Denne modulen ble designet og skrevet i april 1996 og eksklusivt donert av The Apache Group i juli 1997

Ralf S. Engelschall
[e-postbeskyttet]
www.engelschall.com

Viktig:

    Filstøtte ".htaccess" kun tilgjengelig på Linux-hosting. På Windows vertsfunksjon ".htaccess" kjører filen web.config.

    Støttemodul ".htaccess" tilgjengelig på alle delte hostingplaner basert på Linux OS. Hvis du mottar en melding som sier at det ikke er støtte mens du installerer CMS ".htaccess" bare ignorere det.

Jeg har ikke en .htaccess-fil, hva bør jeg gjøre?

Hvis du setter opp Apache-nettserveren, men ikke har .htaccess, lag den og skriv de nødvendige direktivene.

Å lage .htaccess, gå inn i vertskontrollpanelet i henhold til instruksjonene: Plasser filen .htaccess i nettstedskatalogen ved å bruke artikkelen: .

Hvis du ved et uhell slettet en fil .htaccess, gjenopprette den. Eller legg til en standardfil .htaccess for CMS:

.htaccess-filen er ikke synlig i cPanel

For å se skjulte filer (som starter med en prikk) i cPanel, følg disse trinnene:

Hvordan aktivere mod omskriving?

Modul "mod_rewrite" finnes på alle Linux-vertsplaner. For å aktivere "mod_rewrite" legge til i filen .htaccess visningslinje.

I denne opplæringen lærer vi hvordan du administrerer URL-omskriving ved hjelp av Apache 2 og mod_rewrite-modulen. Denne modulen lar deg omskrive URL-er på en renere måte, oversette menneskelesbare stier til kodevennlige søkestrenger eller omdirigere URL-er basert på tilleggsbetingelser.

Denne veiledningen er delt inn i to deler. Den første installerer eksempelnettstedet og viser et enkelt omskrivingseksempel. Den andre delen inneholder to mer dyptgående eksempler på vanlige omskrivingsregler.

Forutsetninger

Ved å følge denne veiledningen trenger du:

  • Én Debian 8-server installert med første serveroppsett.
  • Apache 2 installert på serveren etter artikkelen.

Trinn 1 - Aktiver mod_rewrite

Først må vi aktivere mod_rewrite . Den er tilgjengelig, men følger ikke med en ren installasjon av Apache 2.

Sudo a2enmod omskriving

Den aktiverer modulen eller advarer deg om at modulen allerede er aktivert. Start Apache på nytt for at endringene skal tre i kraft.

mod_rewrite er nå fullt aktivert. I neste trinn vil vi lage en .htaccess-fil som vi skal bruke til å definere omskrivingsreglene for omdirigeringen.

Trinn 2 - Sette opp .htaccess

.htaccess-filen lar oss endre reglene for omskrivning uten å få tilgang til serverens konfigurasjonsfiler. Av denne grunn er .htaccess avgjørende for sikkerheten til nettapplikasjonen din. Perioden som går foran filnavnet sikrer at filen er skjult.

Merk

Eventuelle regler du plasserer i .htaccess-filen kan også plasseres direkte i serverens konfigurasjonsfiler. Faktisk anbefaler den offisielle Apache-dokumentasjonen å bruke serverkonfigurasjonsfiler i stedet for .htaccess fordi Apache behandler dem raskere.

I dette enkle eksemplet vil imidlertid ytelsesgevinsten være ubetydelig. Det er også nyttig å sette .htaccess-regler, spesielt med flere nettsteder på samme server. Det krever ikke omstart av serveren for at endringene skal tre i kraft, og det krever ikke superbrukerprivilegier for å redigere disse reglene, noe som gjør vedlikehold og endringer mulig fra ikke-privilegerte kontoer. Noen populære programmer med åpen kildekode, som Joomla, er ofte avhengige av .htaccess-filen i programvaren for å modifisere og lage tilleggsregler etter behov.

Vi må installere og sikre noen flere innstillinger før vi kan komme i gang.

Som standard tillater Apache ikke bruk av .htaccess-filen for å håndheve omskrivingsregler, så du må tillate endringer i filen først. Åpne Apaches standard konfigurasjonsfil ved å bruke nano eller din favoritt tekstredigerer.

sudo nano /etc/apache2/sites-available/000-default.conf

Inne i denne filen finner du blokken , fra første linje. Inne i denne blokken legger du til følgende nye blokk slik at konfigurasjonsfilen din ser slik ut. Sørg for at alle blokker er riktig innrykket.

/etc/apache2/sites-available/000-default.conf

Alternativer Indekser FølgSymLinks MultiViews AllowOverride All Krev alle gitt . . .

Lagre og lukk filen. Start Apache på nytt for at endringene skal tre i kraft.

sudo systemctl start apache2 på nytt

Lag nå en .htaccess-fil i rotkatalogen på nettet.

Legg til denne linjen øverst i den nye filen for å aktivere overskriving.

/var/www/html/.htaccess

Omskriv motor på

Lagre filen og avslutt.

Du har nå en live .htaccess-fil som du kan bruke til å administrere nettapplikasjonens rutingsregler. I neste trinn vil vi lage eksempler på nettstedsfiler som vi vil bruke for å demonstrere reglene for omskriving.

Trinn 3 - Sette opp URL-omskriving

Her setter vi opp en grunnleggende URL-omskriving som konverterer URL-er til faktiske kodebaner. Spesielt vil vi gi brukere tilgang. http://din_server_ip /om

La oss starte med å lage en fil kalt about.html i webrotkatalogen.

Sudo nano /var/www/html/about.html

Kopier følgende HTML-kode til en fil, og lagre og lukk den.

/var/www/html/about.html

Om oss

Om oss

Du kan få tilgang til http://din_server_ip/about.html, men vær oppmerksom på at hvis du prøver å få tilgang til http://din_server_ip/about, vil du se en feilmelding 404 ikke funnet. Men for at brukere skal få tilgang til siden ved å bruke om i stedet for å omskrive reglene, vil denne funksjonaliteten tillate.

RewriteRules følger følgende format:

Generell struktur for RewriteRule

RewriteRule-mønstererstatning

  • RewriteRule definerer et direktiv.
  • mønster er et regulært uttrykk som samsvarer med ønsket streng fra URL-en, nettleservisningstyper.
  • substitusjon er banen til den virkelige URL-en, dvs. banen til Apache-filserverne.
  • flagg er valgfrie parametere som du kan endre hvordan regelen fungerer.

Åpne .htaccess-filen.

sudo nano /var/www/html/.htaccess

Etter den første linjen legger du til en RewriteRule merket med rødt, og lagrer filen.

/var/www/html/.htaccess

RewriteEngine på RewriteRule ^about$ about.html

I dette tilfellet er ^about$ malen, about.html er erstatningen og er flagget. Vårt eksempel bruker flere tegn med spesiell betydning:

  • ^ peker på begynnelsen av URL-en, etter your_server_ip / .
  • $ indikerer slutten av URL-en.
  • ca samsvarer med strengen "om".
  • about.html er den faktiske filen som brukeren har tilgang til.
  • er et flagg som gjør regelen ufølsom for store og små bokstaver.

Nå skal du kunne få tilgang til http://din_server_ip/about i nettleseren din. Faktisk, med regelen vist ovenfor, vil følgende nettadresser peke til about.html:

  • http://din_server_ip /about , på grunn av regeldefinisjonen.
  • http://din_server_ip /Om , siden regelen ikke skiller mellom store og små bokstaver.
  • http://din_server_ip /about.html , siden det originale tilpassede filnavnet alltid vil fungere.

Nedenfor vil ikke være:

  • http://din_server_ip /about/ fordi regelen tydelig sier at det ikke kan være noe etter om å bruke $-tegnet.
  • http://din_server_ip /kontakt fordi den ikke samsvarer med om-linjen i regelen.

Du har nå en live .htaccess-fil med en enkel regel som du kan endre og utvide for å passe dine behov. I de følgende avsnittene vil vi vise ytterligere to eksempler på de mest brukte direktivene.

Eksempel 1 – Forenkling av spørringsstrengen med RewriteRule

Webapplikasjoner bruker ofte spørrestrenger, som legges til URL-en ved å bruke et spørsmålstegn (?) etter adressen. Individuelle parametere er atskilt med et og-tegnet (&). Spørrestrenger kan brukes til å sende tilleggsdata mellom individuelle applikasjonssider.

For eksempel kan søkeresultatsider skrevet i PHP bruke en URL som http://example.ru/results.php?item=shirt&author=andreyex . I dette eksemplet passerer to ekstra parametere det imaginære result.php av applikasjonsskriptet: element med verdien skjorte og forfatter med verdien andreyex . Applikasjonen kan bruke søkestrenginformasjonen til å bygge den riktige siden for den besøkende.

Apache-omskrivingsregler brukes ofte for å forenkle slike lange og skjemmende lenker som ovenfor i vennlige nettadresser, som er lettere å skrive og tolke visuelt. I dette eksemplet ønsker vi å forenkle koblingen ovenfor for å lage http://example.ru/shirt/andreyex . skjorte og verdiene til forfatter- og andreyex-parameterne til samme adresse, men uten søkestrengen og skriptnavnet.

Her er en regel for å implementere dette:

Enkelt eksempel

RewriteRule ^shirt/andreyex$ results.php?item=shirt&author=andreyex

shirt/andreyex samsvarte eksplisitt i den forespurte adressen og Apache ble bedt om å kjøre results.php?item=shirt&author=andreyex i stedet.

flagg er ofte brukt i omskrivingsregler[. De ber Apache legge til eventuelle ekstra spørringsstrenger til den serverte URL-en. Uten dette vil den ekstra søkestrengen bli forkastet. http://example.ru/shirt/andreyex?page=2 results.php?item=shirt&author=andreyex&page=2

Mens denne metoden oppnår ønsket effekt, er både elementnavnet og forfatteren hardkodet inn i reglene. Dette betyr at regelen ikke vil fungere for andre gjenstander som bukser eller forfatter som destroyer.

For å gjøre regelen mer generell kan vi bruke regulære uttrykk for å matche deler av den opprinnelige adressen og bruke disse delene i erstatningsskjemaet. Den endrede regelen vil se slik ut:

Enkelt eksempel

RewriteRule ^(+)/(andreyex|destroyer|høst|vår) results.php?item=$1&author=$2

Det første regulære uttrykket i gruppen i parentes samsvarer med en streng som inneholder alfanumeriske tegn og tall, som skjorte eller bukser, og lagrer det matchede fragmentet som variabelen $1 . Den andre gruppen med uttrykk i parentes samsvarer nøyaktig med andreyex , destroyer , fall eller spring , og lagrer også det matchede fragmentet som $2 .

De matchede utdragene er da i den resulterende URL-en til element- og forfattervariablene i stedet for den hardkodede skjorten og andreyex vi brukte før.

Ovennevnte vil for eksempel konvertere http://example.ru/pants/andreyex til http://example.ru/results.php?item=pants&author=andreyex . Dette eksemplet er også for fremtiden, slik at flere elementer og forfatter kan skrives om på riktig måte ved hjelp av en enkelt regel.

Eksempel 2 - Legge til en betingelse med logikk ved å bruke RewriteConds

Omskrivingsreglene blir ikke nødvendigvis alltid evaluert etter hverandre uten noen begrensninger. RewriteCond-direktivet lar oss legge til betingelser til våre omskrivingsregler for å kontrollere når reglene behandles. RewriteConds følger følgende format:

Generell struktur for RewriteCond

RewriteCond TestString Condition

  • RewriteCond definerer RewriteCond-direktivet.
  • TestString er strengen som skal testes.
  • Tilstand er mønsteret eller tilstanden som skal matche.
  • Flagg er valgfrie parametere som kan endre tilstanden og evalueringsreglene.

Hvis RewriteCond er sant, vil RewriteRule umiddelbart etter bli vurdert. Hvis det ikke er det, vil regelen falle bort. Flere RewriteConds kan brukes etter hverandre, og med standardoppførselen må de alle evalueres til sanne og i neste regel å vurdere.

Som et eksempel, la oss si at du ønsker å omdirigere alle forespørsler om ikke-eksisterende filer og kataloger på nettstedet ditt tilbake til hovedsiden i stedet for å vise standard feilside. 404 ikke funnet. Dette kan oppnås med følgende regelbetingelser:

Omdiriger alle forespørsler om ikke-eksisterende filer og kataloger til hovedsiden

RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule . /

Med tanke på ovenstående:

  • %(REQUEST_FILENAME) er strengen som skal testes. I dette tilfellet, det forespurte filnavnet, som er en systemvariabel som er tilgjengelig for hver forespørsel.
  • -f innebygd tilstand som sjekker om det forespurte navnet finnes på disken og er en fil. ! - Er negasjonsoperatøren. Når kombinert, evalueres !-f til sann bare hvis det angitte navnet ikke eksisterer eller ikke er en fil.
  • På samme måte evalueres !-d til sann bare hvis det angitte navnet ikke eksisterer eller ikke er en katalog.

RewriteRule på siste linje vil kun tre i kraft for forespørsler om ikke-eksisterende filer og kataloger. Selve RewriteRule er veldig enkel og omdirigerer hver forespørsel til /roten til nettstedet.

Produksjon

mod_rewrite er en nyttig Apache-modul som kan brukes effektivt for å gi lesbare nettadresser for mennesker. I denne leksjonen lærte du hvordan du bruker RewriteRule-direktivet til å omdirigere URL-er, inkludert fra en spørringsstreng. Du har også lært om URL-omadressering ved å bruke RewriteCond-direktivet.

Tenk tilbake på ditt siste besøk i en nettbutikk. Når du fant det riktige produktet, så du sannsynligvis noe sånt som denne nettadressen:

Dette er ikke fordi utviklerne av denne siden brukte mye tid på å sette opp separate kataloger for ulike produktkategorier, men takket være en hendig modul kalt mod_rewrite. Denne modulen lar deg lage tilpassede og forenklede URL-er. URL-en ser faktisk omtrent slik ut:

http://www.buy-online.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?

Denne opplæringen dekker aktivering av denne modulen, opprettelse og bruk av en .htaccess-side og oppsett av URL-omskriving.

Krav

Du må også installere apache først. For å raskt installere denne webserveren på Ubuntu, bruk kommandoen:

sudo apt-get installer apache2

1: Aktiver mod_rewrite

Først må du aktivere mod_rewrite, det er veldig enkelt:

sudo a2enmod omskrive

Denne kommandoen vil aktivere modulen, eller vise meldingen "Module omskriving allerede aktivert" hvis modulen allerede er aktivert.

2: Hva er .htaccess?

Når modulen er aktivert, kan du sette opp koblingsomskriving ved å lage en .htaccess-fil i nettstedskatalogen.

.htaccess-filen er en måte å finjustere nettstedet uten å måtte endre serverkonfigurasjonsfiler. Prikken som begynner filnavnet betyr at filen er skjult.

I tillegg er plasseringen av .htaccess-filen viktig, siden innstillingene til denne filen vil påvirke alle filer og underkataloger til katalogen den ligger i.

Du kan opprette en .htaccess-fil ved hjelp av et tekstredigeringsprogram, og deretter laste den opp til nettstedet ved hjelp av en ftp-klient.

Merk: filen må hete nøyaktig .htaccess; Filnavnet må ikke inneholde flere utvidelser.

Alternativt kan du opprette en .htaccess-fil gjennom terminalen ved å bruke denne kommandoen, og erstatte example.com med nettstedets domenenavn.

Inkludert .htaccess-filen

Åpne konfigurasjonsfilen for å la .htaccess-filen overstyre standard nettstedinnstillinger.

Merk: Dette vil kreve utvidede sudo-privilegier.

sudo nano /etc/apache2/sites-available/default

I denne filen finner du følgende seksjon og endre verdien på AllowOverride-linjen (erstatt Ingen med alle). Som et resultat vil delen se slik ut:


Alternativindekser FollowSymLinks MultiViews
Tillat Override alle
bestille tillate, nekte
tillate fra alle

Etter å ha lagret endringene og lukket filen, start apache-serveren på nytt. .htacess-filene er nå tilgjengelige for alle nettsteder på serveren.

sudo-tjenesten apache2 omstart

Nå er du klar til å omskrive nettstedets URL-er.

Trinn 3: Omskriving av nettadresser

Hele URL-omskrivingsoperasjonen foregår i .htaccess-filen. Generelt følger alle URL-omskrivingskommandoer det samme mønsteret:

RewriteRule Pattern Substitution

Alternativer brukt i denne kommandoen:

  • RewriteRule: Dette er delen der du kan angi de nødvendige direktivene.
  • Mønster: Denne delen er for å tolke ønsket URL ved bruk av regulære uttrykk. Denne veiledningen dekker ikke regulære uttrykk; litt nyttig informasjon om dette finner du på Apache-siden.
  • Substitusjon: Viser den faktiske URL-en til siden. En slik kobling er vanskelig å huske fordi den består av PHP-parametere eller lange tallsekvenser, for eksempel: www.bestshop.com/gadgets.php?innovation=laptops
  • Valgfrie flagg: Et flagg er en tagg på slutten av et RewriteRule-direktiv som kan endre oppførselen til et uttrykk. Noen vanlige flagg er: [F] tillater ikke nettadresser, ignorerer store bokstaver eller kontrollerer omdirigeringskoden som brukes, [L] sier at det er den siste regelen i en serie.

Eksempler på omskrivning av URL

Eksempel 1: åpne side A - gå til side B

Dette er det enkleste eksemplet på URL-omskriving: en besøkende skriver inn en URL i nettleseren, men blir omdirigert til en annen. Følg instruksjonene i denne delen for å konfigurere denne virkemåten.

For å komme i gang, lag to nettsider; for eksempel handler den første om epler (apples.html) og den andre om appelsiner (appelsiner.html).

Kopier denne koden:



epler


Denne siden handler om epler



Lag deretter en side til (i dette tilfellet appelsinsiden). For å gjøre dette, erstatt bare epler i denne kodeblokken med appelsiner.

Åpne deretter .htaccess-filen:

sudo nano /var/www/example.com/.htaccess

Skriv inn følgende URL-omskrivingskommandoer i den:

Omskriv motor på
RewriteRule ^oranges.html$ apples.html

Lagre og lukk filen.

Besøk deretter /oranges.html-siden, den vil inneholde informasjonen til /apples.html-siden.

La oss se nærmere på kommandoen ovenfor:

  • ^oranges.html: Angir hvordan ønsket side starter. Et skritt (^) indikerer begynnelsen av en linje. Med andre ord, hvis siden hvis URL må skrives om hadde startet annerledes (for eksempel ikke oranges.html, men oranges_1.html), ville den ikke samsvare med omskrivingsregelen og ville ikke bli omdirigert til birds.html-siden.
  • $: Dollartegnet plasseres på slutten av URL-en. Igjen, hvis strengen ender annerledes (for eksempel inneholder tegn etter de erklærte siste tegnene), vil nettsiden ikke bli gjenkjent av omskrivingsregelen.
  • apples.html: Denne siden er der nettleseren sender trafikk.

Eksempel 2: Parameter som en underkatalog i en URL

Sjekk url:

http://example.com/results.php?products=apple

Det vil være mye klarere gjengitt som:

http://example.com/products/apple

For å gjøre dette, legg til følgende linjer i .htaccess:

Omskriv motor på
RewriteRule ^products/(+)/?$results.php?products=$1

Disse linjene består av følgende alternativer:

  • ^produkter: I dette tilfellet må URL-en starte med ordet produkter som skal omdirigeres (merk at dette kun gjelder tekst etter domenet). Igjen, hvis URL-en starter annerledes, vil ikke regelen gjelde.
  • (+): Denne parentesen indikerer at URL-en kan være et hvilket som helst tegn. Plusstegnet indikerer at ett eller flere tegn kan stå i parentes.
  • /?$: Dollartegnet markerer slutten på en linje. Spørsmålstegnet lar deg sette en skråstrek på slutten av linjen (selv om dette ikke er nødvendig).
  • : Dette er et flagg på slutten av en frase, som indikerer at regelen skal ignorere store og små bokstaver for alle tegn.

Eksempel 3: Sette opp rene lenker

Denne funksjonen er uunnværlig hvis nettadressene er for lange eller komplekse.

Som et eksempel, ta følgende URL:

http://example.com/results.php?products=produce&type=fruit&species=apple

http://example.com/produce/fruit/eple

For å gjøre dette, legg til følgende linjer i .htaccess (forresten, .htaccess kan inneholde et ubegrenset antall slike seksjoner):

Omskriv motor på
RewriteRule ^(kjøtt|produser|meieri)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3

La oss se nærmere på denne koden:

  • Tegnet (^-tegnet) indikerer begynnelsen av et uttrykk.
  • (kjøtt|produser|meieri): For å begrense alternativene som kan vises, inkluderer du kun tillatte verdier i parentes (kjøtt, produsere og meieri i dette tilfellet). Hvis URL-en inneholder en parameter uten parentes, vil omskrivingen mislykkes.
  • ([^/.]+) indikerer at alt bortsett fra tegnene etter merket (i dette tilfellet skråstreken og punktum) kan kuttes.
  • results.php?products=$1&type=$2&species=$3: hver verdi i parentes vil bli trukket ut og deretter satt inn i den lengre URL-en i erstatningsdelen. $1 står for den første parentesen, $2 for den andre, $3 for den tredje.

Fortsettelsen av artikkelen finner du.

Tags: ,

Denne veiledningen vil hjelpe deg med å sette opp URL-omskriving på Apache2 ved å bruke mod_rewrite-modulen. Dette verktøyet lar deg omskrive URL-er og lage rene lenker ved å konvertere komplekse baner til klare og lesbare lenker.

Krav

  • Ubuntu Server 14.04.
  • Bruker med sudo-tilgang (detaljer finnes i manualen).

Trinn 1 Installere Apache

Apache kan installeres ved å bruke apt-get-pakkebehandlingen.

Først må du oppdatere pakkeindeksen:

sudo apt-get oppdatering

Apache er en populær modulær webserver (det vil si at den lar deg tilpasse funksjoner ved å aktivere og deaktivere moduler). For å installere Apache 2, skriv inn:

sudo apt-get installer apache2

Apache-serveren ble installert.

Nå må vi fokusere på modulene.

2: mod_rewrite-modul

For å aktivere mod_rewrite, skriv inn:

sudo a2enmod omskrive

Kommandoen vil aktivere modulen og varsle deg om at modulen kjører. For å oppdatere webserverinnstillingene, start den på nytt:

sudo-tjenesten apache2 omstart

Trinn 3: Opprett .htaccess-filen

Nå må vi skrive .htaccess-filen som skal administrere omskrivingen.

.htaccess-filen definerer individuelle Apache-direktiver for hvert enkelt domene.

Merk: På Linux begynner skjulte filnavn med en prikk.

Først må du aktivere støtte for .htaccess-filer. For å gjøre dette, rediger AllowOverride-direktivet i Apache-konfigurasjonsfilen. Åpen fil:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Finn en blokk og legg til følgende blokk:

etc/apache2/sites-available/default

Alternativindekser FollowSymLinks MultiViews
Tillat Override alle
bestille tillate, nekte
tillate fra alle

Nå skal webserverens konfigurasjonsfil se slik ut:

/etc/apache2/sites-available/default


. . .

. . .

For å oppdatere innstillingene, start Apache på nytt.

sudo-tjenesten apache2 omstart

Opprett en .htaccess-fil:

Legg til denne linjen i begynnelsen av den nye filen for å aktivere RewriteEngine:

Omskriv motor på

Lagre og lukk filen. Dette vil tillate Apache å behandle reglene for omskriving.

Andre brukere skal kun ha lesetilgang til .htaccess. Endre filtillatelser:

sudo chmod 644 /var/www/html/.htaccess

4: Overskriv oppsett

Denne delen viser deg hvordan du setter opp grunnleggende URL-omskriving. Linken example.com/about brukes som eksempel.

Opprett en about.html-fil:

sudo nano /var/www/html/about.html

Kopier følgende kode og plasser den i en fil:



Om oss


Om oss



Merk at bare about.html er tilgjengelig. Hvis du skriver inn lenken server_ip_address /about, vil du få en 404 Not Found-feil. Lag en omskrivingsregel for å fikse dette.

Åpne .htaccess-filen:

sudo nano /var/www/html/.htaccess

Legg til følgende linje:

RewriteRule ^about$ about.html

Filen inneholder nå følgende innstillinger:

Omskriv motor på
RewriteRule ^about$ about.html

Nettleseren skal nå kunne betjene siden example.com/about.

Ved å bruke denne regelen som eksempel kan vi vurdere den generelle syntaksen for omskriving.

  • ^about$ er mønsteret som URL-en samsvarer med og som brukere legger inn i nettleseren. I dette eksemplet brukes metategn for å tydelig indikere plasseringen av mønsteret: tegnet ^ indikerer begynnelsen av mønsteret, og $ slutten.
  • about.html: Kildebanen til siden der about.html-filen vises.
  • : Flagg som deaktiverer sensitivitet for store og små bokstaver for nettadressen.

I henhold til denne regelen kan siden nås via følgende lenker:

example.com/about
example.com/About
example.com/about.html

example.com/about/
eksempel.com/kontakt

Generelle maler

Så nå vet du det grunnleggende om å skrive omskrivingsregler. La oss se på ytterligere to eksempler.

Merk: For testing kan du lage et par ekstra filer.

Eksempel 1: Forenkling av spørringsstrengen med RewriteRule

RewriteRule-regler har følgende format:

RewriteRule-mønstererstatning

  • RewriteRule: direktiv.
  • mønster: et regulært uttrykk som spesifiserer mønsteret for å søke etter en streng.
  • substitusjon: mål-URL
  • flagg: valgfrie parametere som endrer oppførselen til regelen.

Apper bruker ofte spørrestrenger. Disse strengene er i URL-en, og begynner med et spørsmålstegn (?) og slutter med et og-tegnet (&). Når du behandler omskrivingsregler, ignorerer Apache disse to tegnene. For eksempel kan nettadressen til en søkeresultatside skrevet i PHP se slik ut:

http://example.com/results.php?item=shirt&season=summer

Selvfølgelig vil brukerne være mye mer komfortable hvis lenken er ren:

http://example.com/skjorte/sommer

Dette kan oppnås på to måter: ved enkel substitusjon eller gruppering av parametere.

1: Enkel utskifting

Lag en regel som gjør en enkel erstatning for å gjøre lenken ren:

RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer

Denne regelen vil bruke skjorte/sommer i stedet for results.php?item=shirt&season=summer.

2: Kartlegging og gruppering

I noen situasjoner må du optimalisere søkestrengen (for eksempel for å inkludere alle årstider). Til dette trenger du:

  • Spesifiser et sett med alternativer ved å skille dem med pipetegnet | (logisk ELLER-operator).
  • Grupper alle gitte parametere ved å bruke parenteser () og referer deretter til gruppen ved å bruke $1-variabelen (der 1 er nummeret til parametergruppen).

Dette vil resultere i følgende regel:

RewriteRule ^skjorte/(sommer|vinter|høst|vår) results.php?item=shirt&season=$1

Denne regelen legger til et nytt segment i URL-en.

3: Match tegnsett

For at brukeren skal åpne den rene URL-en til en hvilken som helst del av nettstedet (ikke bare / skjorte), må du:

  • Skriv et regulært uttrykk som samsvarer med alle alfanumeriske tegn. De firkantede parentesene indikerer søkemønsteret (i dette tilfellet inkluderer det alle tegn), og +-tegnet indikerer at hvert tegn i mønsteret kan gjentas et ubegrenset antall ganger.
  • Grupper dette tegnsettet og gi det $2.

RewriteRule ^(+)/(sommer|vinter|høst|vår) results.php?item=$1&season=$2

http://example.com/results.php?item=pants&season=summer

http://example.com/bukser/sommer

4: Ytterligere søkestreng

Dette vil tillate deg å eliminere en rekke potensielle problemer. Prøv å konvertere:

http://example.com/bukser/sommer?page=2

http://example.com/results.php?item=pants&season=summer&page=2

Med gjeldende innstillinger vil du ikke kunne navigere til page=2. Dette kan fikses med QSA-flagget, som lar spørringsstrenger kombineres. Rediger regelen som følger:

RewriteRule ^(+)/(sommer|vinter|høst|vår) results.php?item=$1&season=$2

Eksempel 2: RewriteCond-betingelser

La oss nå se nærmere på RewriteCond-direktivet. RewriteCond har følgende format:

RewriteCond TestString Condition

  • RewriteCond: direktiv.
  • TestString: Strengen som skal sammenlignes.
  • Tilstand: Mønsteret som strengen skal sammenlignes med.
  • Flagg: tilleggsalternativer.

Hvis RewriteCond er sann, vil Apache behandle følgende RewriteRule.

1: Standardside

Du så tidligere at hvis den forespurte siden ikke eksisterer, returnerer Apache en 404 Not Found-feilside. Imidlertid kan Apache i stedet omdirigere alle slike forespørsler til hjemmesiden. Legg til følgende betingelse for å sikre at den forespurte filen eksisterer:

RewriteCond %(REQUEST_FILENAME) !-f
RewriteRule ^admin/(.*)$ /admin/home

Vurder regelen ovenfor i deler:

  • %(REQUEST_FILENAME) sjekker den forespurte strengen.
  • !-f: operatør! (ikke) indikerer at hvis den forespurte filen ikke eksisterer, bør webserveren kjøre neste omdirigeringsregel.
  • RewriteRule omdirigerer forespørselen til /admin/home.

Du kan også angi et ErrorDocument som alle forespørsler om ikke-eksisterende sider skal sendes til. Opprett en ErrorDocument-regel og omdiriger alle 404-feil til error.html-siden:

ErrorDocument 404 /error.html

2: Begrens tilgang med IP

RewriteCond lar deg begrense tilgangen til et nettsted etter IP-adresse.

For eksempel vil denne regelen blokkere all trafikk unntatt 12.34.56.789:

RewriteCond %(REMOTE_ADDR) !^(12\.34\.56\.789)$
RewriteRule(.*) -

Hva annet å lese