Spørsmål og svar om digital markedsføring - Hump Day Hangouts - Episode 156 (3 Year Anniversary!) Replay

Forutsatt at hjemmesiden min er https://example.com/test-website/. Det jeg vil gjøre er å legge til en spørringsstreng på slutten av hjemmesiden og på alle sider som begynner med https://example.com/test-website/products/ og https://example.com/test-website/shop/.

Dette er min nåværende kode:

# BEGIN WordPress  RewriteEngine On RewriteBase /test-website/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /test-website/index.php [L] RewriteCond %{REQUEST_METHOD} !^POST RewriteCond %{QUERY_STRING} !^loc [NC] RewriteRule (.*) /%{REQUEST_URI}/?loc=%{HTTP:CF-IPCountry} [NC,NE,R,L,QSA]  # END WordPress 

Koden min fungerer bra og legger til "loc" -strengparameteren til hjemmesiden URL og til alle sidene på wp-admin, men den fungerer ikke på noen andre sider på frontend som https://example.com/test-website/products/. Siden åpnes bare normalt, men uten spørringsstrengen.

Jeg prøvde å fjerne følgende fra koden min

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /test-website/index.php [L] 

Dette resulterte i at hjemmesiden og wp-admin fortsatt fungerte bra, men andre sider på frontend for å gi 404 feil.

Håper du kan hjelpe meg med å løse dette problemet, spesielt at jeg ikke har erfaring med regex eller mod_rewrite.

  • For å avklare inneholder WordPress-nettadressene dine faktisk /test-website URL-banen segment? Er din .htaccess filen i dokumentroten eller i /test-website katalog?
  • @ MrWhite alle filene er inne /test-website katalog

Det du beskriver er en (ekstern) omdirigere, ikke en (intern) "omskriving" som angitt i tittelen på spørsmålet ditt. (Hvis du ønsket en "omskriving", ville du ikke bruke den .htaccess for dette på et WordPress-nettsted.)

Du bør heller ikke endre WordPress-direktivene i # BEGIN WordPress kodeblokk - dette administreres av WordPress og vil sannsynligvis bli overstyrt når WP-oppdateringer (eller i det minste vil prøve).

Jeg prøvde å fjerne følgende fra koden min

Koden du prøver å fjerne, er en del av WordPress-frontkontrolleren. Hvis du fjerner det, vil ganske permalinks ikke fungere, og nettstedet ditt vil trolig gå i stykker. (dvs. sider i frontend vil ikke løse seg, og du får en 404.)

Du har i utgangspunktet plassert viderekoblingsdirektivene dine på feil sted. Ved å plassere dem etter WP-frontkontrolleren blir de ganske enkelt ikke behandlet for noen "frontend" URL-er (bortsett fra hjemmesiden, som ikke blir fanget opp av den forrige frontkontrolleren ved første pass). De må dra før de # BEGIN WordPress blokker nær toppen av din .htaccess fil.

Direktivene dine sjekker imidlertid ikke nettadressestiene du vil omdirigere. dvs. hjemmesiden, /test-website/products/ og /test-website/shop/. Din generiske regex .* fyrstikker alt!?

Forutsatt at din .htaccess ligger i /test-website underkatalog, og prøv deretter i stedet:

RewriteCond %{REQUEST_METHOD} !^POST RewriteCond %{QUERY_STRING} !^loc [NC] RewriteRule ^($|products/|shop/) /%{REQUEST_URI}/?loc=%{HTTP:CF-IPCountry} [NC,NE,R,L,QSA] # BEGIN WordPress : 

Bortsett fra: Vil du virkelig legge uavhengig skråstrek til URL-banen?

  • Tusen takk for svaret ditt, det ser ut til å fungere perfekt, jeg har et spørsmål til, som jeg håper du kan hjelpe meg med. Jeg lurte på hvordan jeg skal omskrive url uten å viderekoble https://example.com/test-website/%{REQUEST_URI}/ og https://example.com/test-website/%{REQUEST_URI}/shop/ Jeg prøvde å redigere regelen og bare fjerne '? loc =' men jeg endte med å ha en omdirigeringssløyfe og url så ut som https://example.com/test-website/EG/EG/EG/EG/... og jeg antar at hvis jeg løste løkke problemet vil få en 404 feil
  • Jeg vet at det er mye enklere å gjøre det ved hjelp av php og lage en tilpasset taksonomi for wordpress, men mitt opprinnelige mål er å vise forskjellige priser på woocommerce basert på land og unngå at prisene skal caches ved sidebufring. Derfor brukte jeg mod_rewrite, så jeg lurer på hvordan du kan oppnå det samme som kan gjøres fra wp permalink-innstillinger ved hjelp av htaccess beklager skrivefeilen på den tidligere kommentaren, jeg mente at lenken skulle være example.com/test-website/%{HTTP:CF-IPCountry}/ og eksempel .com / test-nettsted /% {HTTP: CF-IPCountry} / shop /
  • Det er vanskelig å omskrive nettadressen i .htaccess når du bruker WordPress, på grunn av måten WordPress ruter URL-er på (den ser på den forespurte URL-en, ikke på den omskrevne URL-en). Du må gjøre dette i selve WordPress. Imidlertid, hvis informasjonen sendes i en HTTP-forespørselstittel, er det egentlig ikke nødvendig å omskrive (eller omdirigere for den saks skyld). Hvorfor ikke bare få tilgang til CF-IPCountry HTTP-forespørselstittel direkte i PHP?
  • Hvis svaret mitt ovenfor svarte på det opprinnelige spørsmålet ditt, så merk det som godkjent (hake under stemmepilene til venstre) for å fjerne det fra den ubesvarte spørsmålskøen. Når du har 15+ rep, kan du også stemme opp svar du synes er nyttige. Takk, mye verdsatt. :)
  • Tusen takk MrWhite, Visst at jeg godtok svaret ditt, ønsket at jeg kunne oppstemme det også :) Grunnen til at jeg ikke brukte php for å få tilgang til CF-IPCountry og brukte omskriving i stedet for å unngå sidebuffing, jeg har nettbutikk med priser varierer avhengig av land, så hvis siden ble hurtigbufret da en amerikansk besøkende besøkte den, vil alle lenker på siden for britisk bruker ha / oss / på lenken. men jeg skjønt nå for en måte å gjøre det ... for å legge til en tilpasset taksonomi som bruker CF-IPCountry i php for å lage den dynamiske taksonomien / katalogene og deretter bruke rewite for å omdirigere til de koblingene som genereres av wordpress.

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