Stakk spraudņu apmācības: kā iestatīt lapu Opt-In

Šķiet, ka šai ziņai ir mana atbilde: Kā es varu novirzīt veco WordPress URL (ar vaicājuma virkni) uz jaunu URL, izmantojot .htaccess?

Tomēr tas, šķiet, labi nedarbojas ar WordPress iepriekšējiem pārrakstīšanas noteikumiem. Ko es vēlētos darīt, ir īslaicīga novirzīšana (302) no šīs lapas: https://example.com/?post_type=email#038;p=14207 uz šo lapu: https://example.com/email/fall-2017/

Šeit ir attiecīgie mod_rewrite noteikumi manā .htaccess failā un to secība:

# BEGIN WordPress  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress # BEGIN Query String URL redirects  RewriteEngine On RewriteCond %{REQUEST_URI} ^/$ RewriteCond %{QUERY_STRING} ^post_type=email#038;p=14207$ RewriteRule .* https://example.com/email/fall-2017/? [R=302,L]  # END Query String URL redirects 

Otrs acu pāris ir ļoti novērtēts!

Es domāju, ka jums ir divas problēmas.

Pirmkārt, pārrakstīšana tiek pārbaudīta secībā, un jūs ievietojat vairāk ierobežojošo pēc vismazāk ierobežojošā (t.i., vispirms jānovirza ar vaicājuma virkni.)

Otrkārt, mums ir vēl viena problēma saistībā ar vaicājuma virkni. Tas ietver enkuru. Tas nekad netiek sūtīts uz serveri (kaut kas pēc #... ir tikai klienta puse.)

Tāpēc pārrakstīšana nevar ņemt vērā šo jaucējkrānu, tā nenonāks serverī un tāpēc to nevarēs pārbaudīt. Tomēr izskatās, ka tajā ir svarīga informācija, tāpēc es nedomāju, ka to var izdarīt pareizi, ja vien nezināt, kā tas tiek pārveidots, pirms tiek nosūtīts uz serveri. Viena iespēja būtu, ka tas ir rakstīts kā% 23.

Tagad, lai jums būtu laba ideja, jums vajadzētu izpētīt žurnālus un redzēt, ko jūs tur saņemat, kad šī lapa tiek sasniegta.

Šeit man ir piemērs tam, ko jūs varat redzēt.

smsfromme.com:443 173.14.79.185 - - [14 / Sep / 2017: 01: 38: 36 +0000] "GET / api / 1 / message / next HTTP / 1.1" 404 141 "smsfromme.com" - "" Dalvik / 1.6.0 (Linux; U; Android 4.4.2; SM-G386T Build / KOT49H) "TLSv1 ECDHE-RSA-AES128-SHA

Vaicājuma virkne parādās aiz ceļa, tāpēc jums vajadzētu redzēt a GET seko kaut kas līdzīgs:

'GET /?post_type=email#038;p=14207' ... 

Vai arī, ja man ir aizdomas, ka sniedzat mums sniegto informāciju, tas ir:

'GET /?post_type=email' ... 

Un, ja jūsu novirzīšana darbojas, kods aiz ceļa būs 302.

Ļoti iespējams, ka jums ir JavaScript, kas ņem enkuru (dati aiz #) un pārveido to lapas datu GET (t.i., parasti sauc par AJAX pieprasījumu.) Tas ir foršs triks, lai katru reizi izvairītos no visas lapas atkārtotas ielādēšanas. Bet tas apgrūtina "kniebienu" ar .htaccess failu.

  • Liels paldies par lielisko paskaidrojumu, kas notika nepareizi, Aleksis!
  • Šrī - komentāru rediģēšana man noildza. Tāpēc es uzzināju vairāk - tāda veida URL, kāds tam bija jābūt /?post_type=email#038;p=14207 vai tas ir ielīmēts e - pastā un #038; ir HTML kods vietnei &. Problēma ir /?post_type=email#038;p=14207 novirza jūs uz šo skatu /email/ bet paliek vaicājuma URL. Ja & netika kodēts šis URL vaicājums: /?post_type=email&p=14207 novirzītu jūs uz šo ziņu /email/fall-2017/ Ne izmantojot, ne %23 un taisnīgi & novirzīšanā strādāja. Vai jums ir idejas par labāku veidu, kā novirzīt šo URL?
  • 1 " #038; ir HTML kods vietnei &"- izskatās, ka kaut kas ir sabojāts, #038; nav "HTML kods vietnei &"- tai trūkst & priedēklis. ti. tam vajadzētu būt & - ciparu HTML entītija priekš &. Bez & prefiksu tas nekad nebūtu pareizi atšifrēts.
  • @emRae, ah, tad jūs iegūtu divus parametrus viena parametra un enkura vietā ...

Aleksis Vilke patiešām uzzināja problēmas. Kopā ar to, ka #038; URL ir HTML kods vietnei &. Tas vienkārši tika automātiski pārveidots e-pastā un tādējādi nonāca nepareizajā URL.

To es atrisināju, izmantojot WordPress spraudņa Quick Page / Post Redirect spraudni. URL daļas, uz kurām es novirzīju, bija:/?post_type=email uz /email/fall-2017/.

Es nevarēju pareizi veikt regulāro izteiksmi vai formatēšanu, lai tas darbotos .htaccess failā, un es domāju, ka spraudnis zina, kā precīzāk kodēt šo vaicājuma virkni. Līdz brīdim, kad man uzlabosies regex, es pieturēšos pie spraudņa izmantošanas novirzīšanai.

  • Kā minēts manā komentārā zemāk, #038; faktiski nav derīgs "html kods" - izskatās, ka tas ir sabojāts, iespējams, izmantojot manuālu kopēšanu / ielīmēšanu vai kaut ko citu? Viss HTML entītijas sāciet ar a & un beidzas ar a ;.

To es atrisināju, izmantojot WordPress spraudņa Quick Page / Post Redirect spraudni. URL daļas, uz kurām es novirzīju, bija: /?post_type=email uz /email/fall-2017/.

Es nevarēju pareizi veikt regex vai formatējumu, lai tas darbotos .htaccess failu

Nepieciešamais kods / regex ir ļoti līdzīgs (bet pat vienkāršāks) nekā tas, ko sākotnēji ievietojāt, bet tam vienkārši jāiet pirms WordPress priekšējais kontrolieris (kā to iesaka @AlexisWilke).

Piemēram:

# Special redirects RewriteCond %{QUERY_STRING} ^post_type=email$ RewriteRule ^$ /email/fall-2017/? [R=302,L] # BEGIN WordPress  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Nav nepieciešams iesaiņojums vai papildu RewriteEngine direktīvu. Un nav nepieciešams RewriteCond direktīva, kas pārbauda REQUEST_URI servera mainīgais - šo pārbaudi vislabāk var izdarīt RewriteRule modeli ti. ^$ (tukšs URL-ceļš).

strādāja par jums: Charles Robertson | Vēlies ar mums sazināties?