Opprette en RESTful Web Service i PHP

Jeg jobber med en klient som allerede har et tilpasset netthandelsnettsted satt opp på sitt eget domene, f.eks. eksempel.com

Vi ønsker å være vert for WordPress-bloggen deres i en underkatalog for domenet deres, f.eks. example.com/blog På grunn av sikkerhetsproblemer kan vi ikke være vert for WordPress på samme server som resten av nettstedet.

Vi har satt opp en egen server som vil være vert for WordPress-bloggen, og gitt den en midlertidig underdomene-URL.

Hvordan gjør vi det slik at example.com/blog serverer Wordpress-siden fra serveren vår? Vi ønsker ikke en viderekobling, vi vil at den skal se ut som om hele bloggen er vert i underkatalogen '/ blogg'. Hvilke URL-er legger vi i WordPress-databasen? Hvordan skal de omdirigere underkatalogen sin?

Jeg vet at folk anbefaler å bruke et underdomene (dette er det vi har for øyeblikket), men klienten har spesifikt bedt om å bruke en underkatalog for bedre SEO-ytelse.

  • Underdomener er ikke verre for SEO. Se: Hjelper / skader underdomener SEO?
  • @StephenOstermiller Takk! Ja, jeg har hørt det samme fra forskjellige kilder. Jeg må gi det videre til kundene mine.

Underdomenet er absolutt det enkleste alternativet siden du ønsker å være vert for nettstedet på en annen server. Årsaken til dette er at et vertsnavn bare noen gang kan løse seg til ett sted. Hvis du er bekymret for SEO fra de endrede URL-ene, kan du kanskje vurdere å omdirigere til underdomenet i stedet.

Siden du spesifikt ønsker å unngå underdomenet, vil resten av dette svaret imidlertid fokusere på hvordan du gjør det.

Hvis du vil / skal blogge / bli servert fra en annen server, må du opprette en omvendt proxy. Avhengig av tilgangsnivået til den nåværende webserveren, vil det beste alternativet være å opprette en omvendt proxy. Følgende instruksjoner kan kreve noen ferdigheter med serverendringer for å implementere og feilsøke.

Bruker Apache

Forutsatt at du bruker Apache, kan du legge til en regel som denne:

ProxyPass /blog/ http://example.com/blog ProxyPassReverse /blog/ http://example.com/blog 

Du kan plassere dette i VirtualHost-oppføringen, eller et sted i httpd.conf. Dette forutsetter at du har mod_proxy installert, og det vil kreve en Apache-omstart.

Hvis du bruker cPanel, som er populært, kan du se her etter steder å plassere en fil med et navn som slutter på .conf: https://documentation.cpanel.net/display/EA/Modify+Virtualhost+Containers+With+Include+Files

Hvis du bruker cPanel, mod_proxy skal inkluderes, så du trenger ikke å bekymre deg for det, men du må /scripts/rebuildhttpdconf og start deretter Apache på nytt.

Dette vil tillate deg å koble til et annet sted for å hente de faktiske bloggsidene for å tjene gjennom din nåværende server.

Problemet med WordPress, som mange CMS, er at det er veldig kresen om URL-en du bruker for å få tilgang til den. Det betyr at hvis du skulle koble til et underdomenen, og hvis siteurl ikke stemte overens, ville WordPress tjene en 404. Dessuten vil WordPress ofte sende viderekoblinger med siteurl i den. Derfor vil du sannsynligvis trenge å få serveren til å tro at du kobler til samme URL, selv om du kobler til en ekstern server. Den vanskelige delen er at du også trenger root-tilgang for å kunne endre serverens hosts fil. På en Linux-server vil du finne det på /etc/hosts/, og du kan legge til en linje som denne:

123.123.123.123 example.com 

Hvor 123.123.123.123 vil være IP-adressen til serveren der du vil være vert for bloggen. Selvfølgelig vil dette bare fungere hvis ingenting annet på serveren forventer å koble til example.com.

Bruker Nginx

Hvis du bruker Nginx, som er litt mindre vanlig, kan du gjøre dette litt lettere:

upstream blogbackend { server 123.123.123.123:80; } location /blog { proxy_pass http://blogbackend; } 

Fordi Nginx lar deg spesifisere en IP for backend, trenger du ikke å leke med hosts fil.

Siteurl

I begge tilfeller skal den eksterne serveren med bloggen være konfigurert til å servere innhold for http://example.com/blog, og at wold være option_value for begge siteurl og home i $ prefiksetoptions bord. Hvis det er den opprinnelige nettadressen, trenger du ikke å endre den. Hvis du må gjøre endringer, vær forberedt på å sjekke eventuelle hardkodede nettadresser, for eksempel opplastede bilder osv.

Konklusjon

Denne løsningen er litt rotete, og det er mye som kan gå galt. Imidlertid er det fortsatt sannsynligvis renere enn det neste alternativet, hvor du har / blogger / serverer innhold gjennom en PHP-proxy, kanskje ved hjelp av krølling. Dette er grunnen til at standardtilnærmingen ville være å bare bruke et underdomene.

  • ProxyPass og ProxyPassReverse (hvis jeg ikke husker riktig) krever at det inkluderes en modul som ikke alltid er inkludert i alle installasjoner. Det krever også omstart av Apache. Jeg ser ut til å huske at jeg måtte gjøre konfigurasjonsendringer før ProxyPass og ProxyPassReverse ville fungere på Apache 2.4-installasjonen min. Verdt å nevne i svaret ditt. Jubel!!
  • @closetnoc Takk. Jeg tenkte at jeg allerede begynte litt for dypt i systemadministrasjonen. Jeg la til litt ansvarsfraskrivelse også.
  • Takk for dette detaljerte svaret @DKing - Min klient har en utvikler som arbeider med alle serverens ting, så jeg tror de har gjort dette som en omvendt proxy ved hjelp av Nginx. Jeg oppdaterte URL-ene i WP-databasen vår for å bruke URL-en til den nye underkatalogen. Alt ser ut til å fungere bra nå, men det er feil i wp-admin. Spesielt en "502 Bad Gateway nginx" -feil når du prøver å lage et wordpress-innlegg. Også en melding om tilgang nektet når du prøver å lagre wp-temaalternativer. Kan disse være forårsaket av proxyen du tror, ​​eller en feil konfigurasjon av WP? Takk igjen!
  • @ J.Purcell 502 kan være relatert til nginx, eller ikke, men lagring av temalternativer vil sannsynligvis være et WordPress-problem, for eksempel et tillatelsesproblem. Fullmakten fullfører rett og slett informasjonen, så når du endrer temaet, skal det gjøres på oppstrøms-serveren, så jeg vil først undersøke det der. Jeg ville taklet det før jeg så på 502-utgaven.
  • 1 @Baumr Jada. Jeg har lagt ut et svar.

Serveren din har en IP-adresse, så du kan bare ta tak i den og deretter opprette et underdomenen uansett hvor DNS for domenet er vert. Så si at du vil opprette blog.domain.com, du kan peke det til serverens IP-adresse.

  • Takk for svaret, men spørsmålet var hvordan man skulle peke en underkatalog til en annen server, ikke et underdomene. Problemet mitt ble imidlertid løst i samarbeidet med andre utviklere ved hjelp av en omvendt proxy-teknikk. Takk!

fungert for deg: Charles Robertson | Ønsker du å kontakte oss?