Hvordan bruke htaccess å kjøre flere Drupal 7 Nettsteder på Din Cheapo Hosting Account

Du kan kjøre flere nettsteder fra din billig delt web hosting konto, takket være .htaccess.

Hva er poenget med .htaccess uansett? Det er bare en annen grusom spøk å holde oss redd og ydmyk, er det ikke. Det kan virke slik, og selv Apache devs anser det som en form for nær-magi. Det er avhengig av Perl støttet Regular Expressions, så noen regler du skriver for .htaccess er for det meste tegnsetting.


Forståelse minst det grunnleggende .htaccess er avgjørende for å kjøre hvilken som helst nettside på Apache Web server. .htaccess er for pr-katalogen konfigurasjoner. Du plasserer den i katalogen du ønsker å gjøre ting til, og det virker på denne katalogen og alle dens undermapper. Du kan bruke den for autentisering, tilgangskontroll, mod_rewrite direktiver, administrerende flere nettsteder på en enkelt server, og stort sett alt som forvaltes i dine Apache server konfigurasjonsfiler. (På Fedora, CentOS, og andre Red Hattish distros de Apache konfigurasjonsfiler er i /etc /httpd, og på Debian /Ubuntu /Mint de er i /etc /apache2 /.)

Som .htaccess duplikater dine viktigste Apache configs, da bruker du det? Når du ikke har tilgang til din server konfigurasjon, som på billig delt web hosting kontoer. Hvis du har tilgang til din Apache server så du ikke trenger å bry deg med .htaccess, og faktisk bør du ikke bruke det fordi du vil ta en ytelse hit. Når du har konfigurert Apache å tillate .htaccess vil det se ut i hver katalog for det, selv om du ikke har noen .htaccess filer. Dersom du bruker mod_rewrite og sette omskrive reglene i .htaccess reglene vil bli re-kompilert med hver forespørsel. Når omskrive reglene er i serverkonfigurasjonen de blir lest en gang og bufret.

Du kan bruke alle content management system (CMS) du vil, som WordPress eller Joomla. Vi er dykking i Drupal 7 fordi det er en spesiell sak som trenger mer komplekse konfigurasjon. Det er ikke godt dokumentert, så forhåpentligvis vil dette hjelpe horder av frustrerte Drupal 7 admins.

Drupal 7 og .htaccess

Når du kjører flere nettsteder fra en enkelt Apache server det er bedre å bruke Apache virtuelle verter. Men hvis du bruker en billig web hosting konto du vil ikke ha den muligheten, så du må bruke .htaccess. I disse eksemplene jeg bruker en hosting konto med CPanel og Softaculous installatør. Figur 2 viser hva public_html katalogen, som er den Web rot, ser ut med to Drupal 7-installasjoner.


rinkydink måten å få tilgang til hvert område er å inkludere underkatalogen i nettadresser, som mysite.com/drupal2 og myothersite.com/drupal3. Som er greit for testing og når du ikke bryr seg. Men når du gjør omsorg og ønsker URLer som mysite.com og myothersite.com, trenger du .htaccess. Hvis cheapo hosting konto kan du kjøre flere domener først sette dem opp i CPanel henhold domener. Så du bruker .htaccess dirigere trafikken til de riktige områdene.

Drupal 7 trenger spesiell håndtering, fordi du trenger å redigere .htaccess filen i Web rot, og Drupal's.htaccess og settings.php filer. Dette er hva min Web root public_html /.htaccess ser slik ut:

 Alternativer -IndexesOptions + FollowSymLinksRewriteEngine på # Serve www.mysite.com fra drupal2 directoryRewriteCond% {HTTP_HOST} ^ www \\ .mysite \\ .no $ [NC ] RewriteRule ^ http: //% 1% {REQUEST_URI} [L, R = 301] RewriteRule ^ (. * +) $ drupal2 /$ 1 [L, QSA] # Serve www.myothersite.com fra drupal3 directoryRewriteCond% {HTTP_HOST} ^ www \\ .myothersite \\ .no $ [NC] RewriteRule ^ http: //% 1% {REQUEST_URI} [L, R = 301] RewriteRule ^ (. * +) $ drupal3 /$ 1 [L, QSA] 

Du kan kopiere og lime inn denne for dine egne Drupal 7 områder, og alt du trenger å endre er domenenavnet i RewriteCond regelen og nettstedet katalog i andre RewriteRule for hvert område. Deretter skriver du settings.php-filen (mine er public_html /drupal2 /sites /default /settings.php) og sette base_url. Se etter en linje som dette, uncomment det, og skriv stedets basen URL:

 $ base_url = 'http://mysite.com'; //NO skråstrek! 

"Base URL" er en av disse begrepene som høres ut som du bør gjøre noe spesielt. Det er bare din side URL. Nå må du redigere Drupal root .htaccess. I mitt eksempel som er public_html /drupal2 /.htaccess. Dette er et fett fil alle fulle av gode ting. Se etter denne linjen:

 RewriteRule ^ index.php [L] 

Kommentar det ut, og legg til denne linjen: (. *)?

 RewriteRule ^ $ index.php q = $ 1 [L, QSA] 

Og du er ferdig. Et par merknader:

- Drupal oppdateringer vil trampe din Drupal .htaccess, så holde en sikkerhetskopi, eller gjøre rename-navn dans før og etter bruk av oppdateringer. - Du må beskytte settings.php med restriktive tillatelser. Endre den til å lese-skrive når du trenger å redigere den, og deretter endre den til 0400 (eier beskyttet) når du er ferdig.

Hva Just Happened

La oss dissekere dette så vi vet hva som skjer.

 RewriteCond% {HTTP_HOST} ^ www \\ .mysite \\ .no $ [NC] 

RewriteCond definerer vilkårene for omskriving en URL. Syntaksen er RewriteCond TestString CondPattern
. Den TestString evalueres og deretter sammenlignet med CondPattern. Hvis teststrengen matcher forholdene så resultatet er gått til neste regelen.

TestString er den% {HTTP_HOST} variabel, og CondPattern er ^ www \\ .mysite \\ .no $. Dette betyr "undersøke de innkommende HTTP forespørselshoder, og når HTTP_HOST lik www.mysite.com da gjelde følgende RewriteRules". ^ Indikerer starten av strengen som skal tilpasses, og $ markerer slutten av den. De backslashes unnslippe prikkene, fordi dot kan enten være en bokstavelig prikk eller en metategn. [NC] er en RewriteRule flagg som betyr "ingen sak", eller små bokstaver.

Vil du se hvordan HTTP forespørselshoder se ut? Du kan se dem i nettleseren. I Firefox prøve Verktøy > Web Developer > Web Console > Network (figur 3).


RewriteRules gjøre de tunge løftene. Man kan ha flere omskrivningsregler, og hver av dem er påført i rekkefølge. Syntaksen er RewriteRule Pattern Innbytte [flagg]

 RewriteRule ^ http:. //% 1% {REQUEST_URI} [L, R = 301] 

Vår første RewriteRule omdirigeringer alle sidene på nettstedet. Det samsvarer med nettadresser starter med www.mysite.com, og enhver sti komponent (REQUEST_URI) som følger det; med andre ord, alle de andre sidene på nettstedet. Hvordan du spør, ikke% en magisk vet det representerer www.mysite.com? Det er en RewriteCond backreference. Referanser er skapt internt av Apache og er alltid til stede for koding nytelse. Den backreference% 1 ble opprettet automatisk fra vår RewriteCond regelen. Så http: //% 1% {REQUEST_URI} > betyr at alle sidene på nettstedet.

[L, R = 301] betyr stoppe behandlingen når matchende URL er funnet (L) og gjøre en 301-viderekobling (flyttet permanent). Når du tester nye omdirigere regler bør du bruke 302 (midlertidig redirect) så trenger du ikke forvirre søkemotorer og hork SEO.

RewriteRule ^ (. * +) $ Drupal2 /$ 1 [L, QSA ] er det siste trinnet som gjør det hyggelig www.mysite.com URL arbeid, i stedet for www.mysite.com/drupal2. Vi vet allerede hva cirkumflekstegnet og dollartegn mener. Den betinget uttrykk i parentes er tre metategn, som kombinert skaper et wild card som matcher alt. Det skaper også en annen backreference, som brukes i substitusjonen drupal2 /1 $. L er å stoppe behandlingen når vilkårene er oppfylt, og QSA betyr tilføye. Så sette det hele sammen, og det gjør drupal2 /nettstedet roten.

Hvis du tenker dette er alt en liten hjerne-bøying, sikkert er det. Den offisielle Apache dokumentasjon er verdt å studere, og det er mange gode Apache bøker, og ingen Apache admin bør forlate hjemmet uten dem. Anmeldelser