Subdomenii de bază de bază cu codul de codificare

CodeIgniter este un cadru PHP simplu și ușor folosit pentru a crea aplicații web puternice. Astăzi, vom face ceva minunat: vom combina numele de utilizator și subdomeniile pentru a crea o experiență mai coerentă a utilizatorului.

Dacă sunteți puțin confuz, această caracteristică permite utilizatorilor dvs. să acceseze conturile dvs. introducând o adresă URL personalizată, care se potrivește cu numele de utilizator, cum ar fi harbinger.yourapp.com.


Prezentare generală

În acest tutorial, vom crea atât o vizualizare front-end, cât și o vizualizare de aplicații back-end, similară configurației utilizate în Basecamp, unde vizita basecamphq.com afișează pagina de pornire, dar vizitând un subdomeniu afișează pagina de conectare.

Vom folosi adresa fictivă nettutsapp.com, și va crea o pagină "tablou de bord"; cu toate acestea, ați putea integra acest lucru într-un proiect existent cu relativ ușurință.

Înainte de a începe, asigurați-vă că aveți un server web cu PHP instalat. De asemenea, trebuie să descărcați CodeIgniter; în exemplu, folosesc CodeIgniter 2.0, dar codul ar trebui să funcționeze la 1.7.2. Deci sa începem!


Pasul 1: Configurația DNS

În primul rând, trebuie să configurați setările DNS pentru ca toate subdomeniile să rezolve la o singură adresă. Dacă lucrați la un server live, va trebui să modificați setările DNS cu compania care vă gestionează DNS-ul. Acesta este cel mai frecvent gazda web sau registratorul de domenii.

Pentru a acoperi fiecare configurație din acest tutorial ar lua prea mult timp. În schimb, adresați-vă gazdei dvs. pentru ajutor pentru a configura subdomenii de tip wildcard. S-ar putea să vă așteptați să adăugați ceva asemănător liniei de mai jos la configurația DNS.

* .Nettutsappapp.com. IN A 91.32.913.343

În schimb, dacă lucrați la un server local, adăugarea unui subdomeniu wildcard în fișierul hosts este destul de dificilă. Ceea ce prefer să fac este să adaug un singur intrări în scopuri de testare. Acestea pot fi șterse după ce ați terminat. Pentru domeniul nostru, trebuie să adăugăm patru intrări după cum urmează:

  • 127.0.0.1 nettutsapp.com
  • 127.0.0.1 user1.nettutsapp.com
  • 127.0.0.1 user2.nettutsapp.com
  • 127.0.0.1 user3.nettutsapp.com

Mac găzduiește configurarea

Pentru a face acest lucru pe un Mac, deschideți Terminal și tip sudo nano / etc / gazde. Utilizați tastele săgeți pentru a vă deplasa în partea de jos a documentului și adăugați intrările din partea de jos a fișierului. După ce ați terminat, apăsați Ctrl + X și Y pentru a confirma salvarea.

Windows Hosts Configuration

Dacă utilizați Windows, navigați la director C: \ Program Files \ System32 \ drivere \ etc și deschideți fișierul hosts în Notepad sau editorul de text preferat. Adăugați patru intrări, prezentate mai sus, și salvați fișierul.

Dacă ați făcut modificări DNS la un server live, va dura ceva timp înainte de a observa orice efect. Dacă ați efectuat modificări în fișierul gazdă, modificările vor fi imediate.


Pasul 2: Configurația Apache

Scopul aici este de a configura două Host-uri Virtuale în Configurația Apache: unul servește în prima pagină (Basecamp Homepage), iar celălalt servește paginii văzute când este accesată printr-un subdomeniu (pagina de tablou de bord).

Pentru a adăuga intrări noi, trebuie să deschideți httpd.conf fișier, care poate fi găsit în directorul de instalare Apache. Este adesea găsit în bin / apache / conf pliant. Cu toate acestea, în funcție de configurația serverului dvs., locația poate varia.

După deschidere, trebuie să adăugați cele două intrări, prezentate mai jos. Asigurați-vă că schimbați DocumentulRădăcină la o locație la alegere, pe care ați creat-o.

Notă: Amintiți-vă de wildcard-ul și de calea diferită a directorului pe cel de-al doilea VirtualHost.

Utilizatori WAMP: Vă recomandăm să citiți acest post, care descrie modul de configurare a VirtualHosts. S-ar putea să întâlniți și probleme de permisiune; așa că vă recomandăm plasarea directoarelor dvs. VirtualHost în interiorul www director.

  DocumentRoot "/ Utilizatori / densepixel / Site-uri / MAMP PRO / nettutsappfront" ServerName nettutsapp.com ServerAlias ​​nettutsapp.com  Opțiuni -Opțiuni de optimizare FollowSymLinks AllowOverride All    DocumentRoot "/ Utilizatori / densepixel / Site-uri / MAMP PRO / nettutsapp" ServerName nettutsapp.com ServerAlias ​​* .nettutsapp.com  Opțiuni -Opțiuni de optimizare FollowSymLinks AllowOverride All  

Odată ce ați salvat fișierul, trebuie să reporniți Apache pentru ca modificările să aibă efect.

Asigurați-vă că ați creat directoarele pe care le-ați specificat în httpd.conf înainte de a porni serverul.


Pasul 4: Testarea configurației serverului nostru

Înainte de a testa configurația, plasați un element de bază html în fiecare din directoarele pe care le-ați creat mai devreme. Poate adăugați câte o singură linie de text, astfel încât să le puteți diferenția. Am copiat un exemplu pe care să-l folosiți.

    NetTuts App Front   NetTutsApp Front  

Apoi, deschideți browserul dvs. preferat și verificați mai întâi adresa nettutsapp.com. Dacă totul funcționează, trebuie să vă uitați la pagina pe care ați plasat-o în secțiunea "nettutsappfront".

Apoi, verificați un subdomeniu, de ex. user1.nettutsapp.com; aceasta ar trebui să vă arate cealaltă pagină creată în director.

Puteți continua să verificați celelalte subdomenii specificate în fișierul hosts, care ar trebui să afișeze toate paginile salvate în directorul nostru.

Pasul 5: Instalarea CodeIgniter

Acest tutorial presupune că știți cum să instalați CodeIgniter. Dacă nu, ar trebui să aruncați o privire la acest tutorial video de Jeffrey Way, care explică procesul în detaliu.

Plasați fișierele CodeIgniter în directorul nostru după ștergerea html pagina pe care am creat-o inainte. Dacă utilizați CodeIgniter 1.7.2, poate doriți să luați cerere folder din afara sistem pliant.

Testați instalarea accesând adresa URL user1.nettutsapp.com, și ar trebui să vedeți pagina de întâmpinare CodeIgniter.


Pasul 6: Configurarea CodeIgniter

Configurați CodeIgniter așa cum ați proceda normal, așa cum este descris în acest tutorial. Poate doriți să eliminați index.php de la adresa URL, autoload unele biblioteci sau ajutoare, etc În scopul acestui tutorial, avem nevoie pentru a autoload Bază de date biblioteca și URL-ul ajutor. Deschide autoload.php fișier în config director și adăugați intrările relevante.

De asemenea, trebuie să schimbăm controlerul implicit într-unul pe care îl vom face, numit tablou de bord. Această valoare poate fi modificată în cadrul /config/routes.php fişier.

base_url

Pentru subdomeniile utilizatorilor, trebuie să facem base_url dinamică variabilă, deoarece aplicația va primi solicitări din mai multe subdomenii potențiale.

Cea mai ușoară modalitate de a face acest lucru este prin utilizarea funcției HTTP_HOST variabil. Deschide config.php fișier și găsiți variabila $ Config [ 'base_url'], și înlocuiți-l cu următorul cod:

dacă is_set ($ _ SERVER ['HTTPS']) && $ _SERVER ['HTTPS'] == "pe") $ ssl_set = "s"; $ config ['base_url' ] = 'http'. $ ssl_set. ': //'.$_SERVER [' HTTP_HOST '];

Acest cod permite HTTPS conexiuni, cu toate acestea, dacă nu planificați să utilizați HTTPS, îl puteți simplifica base_url = $ _SERVER ['HTTP_HOST'].

Setările bazei de date

Înainte de a merge mai departe și a adăuga setările bazei de date în aplicația noastră CodeIgniter, trebuie să creați atât baza de date, cât și o tabelă de eșantion.

Această aplicație de exemplu utilizează o bază de date și un tabel. Acest tabel va conține toate subdomeniile atribuite în prezent și câteva informații de bază despre ele. Dacă v-ați decis să utilizați acest cod în propria aplicație, va trebui să alocați în general mai mulți utilizatori unui singur subdomeniu, cu toate acestea, schema bazei de date depășește domeniul de aplicare al acestui tutorial.

Tabelul este numit nt_subdomains, în baza de date ntapp, și are patru câmpuri:

  • subdomain_id (primar, auto_increment)
  • subdomain_name
  • user_fname
  • user_sname

De asemenea, am populat tabelul cu două înregistrări, care corespund subdomeniilor pe care le-am adăugat în fișierul gazdă:

Acum putem deschide config-ul bazei de date, fișierul găsit în /application/config/database.php, și editați următoarele valori astfel încât să corespundă setărilor de configurare personale.

$ db ['implicit'] ['hostname'] = 'localhost'; $ db ['implicit'] ['username'] = 'root'; // MAMP implicit $ db ['default'] ['parola'] = 'root'; // MAMP implicit $ db ['default'] ['baza de date'] = 'ntapp';

Și am terminat instalarea aplicației CodeIgniter. Să începem să folosim subdomeniile din aplicația noastră.


Pasul 7: Crearea controlorilor și viziunilor noastre

Pentru această aplicație, vom crea două controale. Primul este un eroare controler, care afișează o eroare dacă subdomeniul nu a fost înregistrat pentru utilizare în aplicație. Celălalt controler este principalul nostru controlor de bord, ceea ce utilizatorul vede dacă subdomeniul a fost adăugat în baza noastră de date.

Controller de eroare

Să mergem mai departe și să ne creăm controlerul de eroare. Mai întâi, creați un fișier nou în / application / controllere director, și apelați-l error.php.
Notă: numele fișierului este important

a sarcinii> vizualizare ( 'eroare'); 

Adăugați codul de mai sus la noul nostru error.php fişier. index funcția încarcă o vizualizare numită "eroare", pe care o vom crea ulterior.

Controller de bord

Acum trebuie să creăm controlerul principal al tabloului de bord, care va fi încărcat atunci când un utilizator intră în unul din subdomenii. Controlorul va verifica dacă subdomeniul a fost înregistrat și va redirecționa dacă este necesar. Vom adăuga mai târziu acest cod, dar mai întâi trebuie să creați controlerul de bază.

Creați un fișier nou în cadrul controlere director, și numele acestuia dashboard.php. În acest fișier, trebuie să creați controlerul și să încărcați vizualizarea tabloului de bord. Copiați codul de mai jos și salvați fișierul.

a sarcinii> vizualizare ( 'tablou de bord'); 

Vizualizare eroare

Pagina de eroare va fi afișată când un utilizator încearcă să acceseze un subdomeniu, care nu a fost înregistrat pentru utilizare de către aplicație. În scopul tutorialului, creați pur și simplu o pagină de bază, afișând mesajul Subdomeniu neînregistrat. Adăugați codul de mai jos într-un fișier nou numit error.php și salvați-l în dosarul aplicație / vizionări.

  Eroare de aplicație: aplicația Nettuts   

Eroare la aplicația Nettuts

Subdomeniu neînregistrat

Vizualizare tablou de bord

Pentru moment, vom crea doar o pagină de bază a tabloului de bord. Puteți utiliza aceeași structură ca vizualizarea de eroare și o puteți schimba doar pentru a citi Tabloul de bord Nettuts, sau ceva de-a lungul acestor linii. Salvați pagina ca dashboard.php, în cadrul aplicație / vizualizări pliant.

Examinați cele două vizualizări accesând adresele URL:

  • user1.nettutsapp.com/index.php/error
  • user1.nettutsapp.com/index.php/dashboard

Lucru? Sa trecem peste.


Pasul 8: Extinderea controlerului nostru de bord (Partea 1)

Următorul pas este să extrageți numele subdomeniu în controlerul nostru, astfel încât îl putem folosi într-o interogare bazată pe baza de date.

Vom introduce codul nostru de verificare a subdomeniului în construi funcția în cadrul controlerului de bord. (Sub părinte :: Controler ()). Aceasta înseamnă că subdomeniul va fi verificat când vor fi accesate oricare dintre funcțiile din controlerul de bord.

Cea mai ușoară modalitate de a extrage numele subdomeniului este utilizarea PHP exploda și setați delimitatorul la ".". Întrucât avem nevoie doar de prima parte, o putem împărți în două părți și apoi vom aloca prima parte (numele subdomeniului) unei variabile.

Pentru a testa acest lucru, putem ecou variabila în controlerul propriu-zis. Vezi codul de mai jos:

 

Accesați adresele URL ale subdomeniilor dvs. și ar trebui să vedeți subdomeniul corect în cadrul paginii dvs., așa cum este prezentat mai jos.
Notă: Puteți șterge declarația de ecou acum.

Acum, că avem acces la numele subdomeniu în controlorul nostru, putem verifica dacă a fost adăugat tabelul pe care l-am creat mai devreme.

Vom folosi CodeIgniter Clasa ActiveRecord pentru a construi interogările noastre, care vor verifica tabelul pentru subdomeniul accesat. Dacă este prezent, utilizatorul va putea accesa pagina tabloului de bord. Dacă, pe de altă parte, subdomeniul nu a fost introdus, atunci li se refuză accesul și apoi sunt redirecționați către pagina de eroare creată anterior.

Pentru acest tutorial, nu vom folosi modele deoarece face tutorialul mult mai ușor de urmărit. CodeIgniter este destul de flexibil, deoarece nu te forțează să le folosești.

În primul rând, trebuie să asamblăm interogarea așa cum arată mai jos. Acest cod va funcționa numai în PHP5, deoarece folosește legarea metodelor; cu toate acestea, îl puteți schimba în funcție de preferințele dvs..

// adaugă din restul constructului // $ this-> db-> din ('nt_subdomains') -> unde ('subdomain_name', $ subdomain_name); $ interogare = $ this-> db-> get ();

Putem folosi funcția CodeIgniter rând() pentru a verifica dacă subdomeniul există în tabel. Dacă nu, atunci trebuie să folosim funcția de redirecționare pentru a redirecționa utilizatorii către controlerul de eroare. Următoarea parte a codului este mai jos:

// se adaugă din codul anterior // if ($ query-> num_rows () < 1)  redirect ('error'); 

Să încercăm acest lucru accesând user1.nettutsapp.com, care ar trebui să vă indrepte către pagina de bord. Acum, încercați user3.nettutsapp.com, care ar trebui să vă redirecționeze către pagina de eroare deoarece nu a fost introdusă în tabel.


Pasul 9: Extinderea controlerului nostru de bord (Partea 2)

Acum putem folosi informațiile din tabel pentru a afișa informații specifice pentru fiecare subdomeniu.

Vom adăuga la index funcționează în controlerul nostru de bord. Mai întâi, copiați codul de nume al subdomeniului și interogarea bazei de date pe care am folosit-o înainte.

indexul funcției () $ subdomain_arr = explode ('.', $ _SERVER ['HTTP_HOST'], 2); $ subdomain_name = $ subdomeniu_arr [0]; $ this-> db-> din ('nt_subdomains') -> unde ('subdomain_name', $ subdomain_name); $ interogare = $ this-> db-> get (); 

Folosim codul CodeIgniter rând() pentru a prelua rezultatul interogării. rând funcția returnează un singur rând de rezultate, ceea ce înseamnă că nu trebuie să folosim a pentru fiecare buclă; este inutil.

// se adaugă din restul funcției index // $ subdomain_info = $ query-> row ();

Apoi, atribuiți user_fname și user_sname valorile coloanelor la mulțime, $ date, care este apoi trecut la vedere.

$ date ['fname'] = $ subdomeniu_info-> user_fname; $ date ['sname'] = $ subdomeniu_info-> numele utilizatorului; $ this-> load-> view ("tablou de bord", $ date);

Putem folosi aceste valori în vederea noastră folosind variabilele $ fname și $ SNAME. Deschideți vizualizarea tabloului de bord și editați-l pentru a citi:

 

Bine ați venit în tabloul de bord

Și am terminat! Să încercăm.


Pasul 10: Testarea

Încercați toate adresele URL și, sperăm, dacă totul merge conform planului, rezultatele ar trebui să fie după cum urmează:

  • nettutsapp.com → Front End Page
  • user1.nettutsapp.com → Tabloul de bord (John Doe)
  • user2.nettutsapp.com → Tablou de bord (Steve Smith)
  • user3.nettutsapp.com → Pagina de eroare

Controller și codul de vizualizare

Iată codul complet folosit pentru controlorii și vizualizările noastre:

Controller de bord

db-> din ('nt_subdomains') -> unde ('subdomain_name', $ subdomain_name); $ interogare = $ this-> db-> get (); în cazul în care ($ query-> num_rows () < 1)  redirect ('error');   function index()  $subdomain_arr = explode('.', $_SERVER['HTTP_HOST'], 2); $subdomain_name = $subdomain_arr[0]; $this->db-> din ('nt_subdomains') -> unde ('subdomain_name', $ subdomain_name); $ interogare = $ this-> db-> get (); $ subdomain_info = $ interogare-> rând (); $ date ['fname'] = $ subdomeniu_info-> user_fname; $ date ['sname'] = $ subdomeniu_info-> numele utilizatorului; $ this-> load-> view ("tablou de bord", $ date); 

Controller de eroare

a sarcinii> vizualizare ( 'eroare'); 

Vizualizare tablou de bord

  Tablou de bord: Nettuts App   

Tabloul de bord Nettuts

Bine ați venit în tabloul de bord

Vizualizare eroare

  Eroare de aplicație: aplicația Nettuts   

Eroare de aplicație

Subdomeniu neînregistrat


Concluzie

Desigur, acest tutorial descrie doar o modalitate de a obține această funcționalitate minunată. Sunt sigur că sunt multe altele; astfel încât să vă simțiți liberi să vă îndemnați cu gândurile și opiniile dvs. în secțiunea de comentarii de mai jos.