Daudzas JS funkcijas manā vietnē sūta Ajax pieprasījumu uz /?something=3213214 bet man tie jāpāradresē uz /something=3213214

Kad es daru:

RewriteRule ^test/(.*) /$1 [R] 

Tas tomēr novirza /test/something=3213214 uz /something=3213214

Bet, kad es daru:

# this probably works and redirect to the same RewriteRule ^?(.*) /$1 [R] #OR RewriteRule ^\?(.*) /$1 [R] #OR RewriteRule ^/?(.*) /$1 [R] #OR RewriteRule ^/\?(.*) /$1 [R] 

Tas nenovirza uz /something=3213214

Kāds ir pareizais sintakse šāda veida novirzīšanai?

Daudzas JS funkcijas manā vietnē sūta Ajax pieprasījumu uz /?something=3213214 bet man tie jāpāradresē uz /something=3213214

Šajā gadījumā jums patiešām vajadzētu "labot" šos AJAX pieprasījumus. Ja tas nav iespējams, jūs, iespējams, varētu ieviest a apietiekšēja pārrakstīšana - bet tas būs atkarīgs no tā, kā tiek virzīts AJAX pieprasījums.

Mēģinot ārēji "novirzīt" daudzi šādi pieprasījumi varētu sagraut jūsu vietni !? Tas var pat nedarboties, atkarībā no tā, kā tiek izpildīts AJAX pieprasījums (tam jāgaida 3xx atbilde un jānosūta pieprasījums uz novirzīto URL).

Ar tādu pieprasījumu kā /?something=3213214, viss pēc pirmā ? ir vaicājuma virkne daļa no URL. The RewriteRule modeli sakrīt tikai ar URL ceļu, kas jo īpaši izslēdz vaicājuma virkni. Lai saskaņotu vaicājuma virkni, jums jāizmanto a RewriteCond (nosacījums) direktīva, kas atbilst QUERY_STRING servera mainīgais.

  1. RewriteRule ^?(.*) /$1 [R]
  2. RewriteRule ^\?(.*) /$1 [R]
  3. RewriteRule ^/?(.*) /$1 [R]
  4. RewriteRule ^/\?(.*) /$1 [R]

#1 un #2 atbilstu tikai tad, ja ? bija URL kodēts (%3F) URL. ti. Tā ir daļa no URL ceļa. Turklāt #3 un #4 nekad neatbilstu a direktorijā (.htaccess) konteksts slīpsvītras prefiksa dēļ

Uz pārrakstīt šāds pieprasījums jums būs jādara kaut kas līdzīgs šim jūsu augšdaļā .htaccess fails:

RewriteCond %{QUERY_STRING} (.+) RewriteRule ^$ /%1 [QSD,L] 

Tomēr tas ir ļoti vispārīgs, jo tas sakrīt jebkurš vaicājuma virkne (kā norāda jūsu jautājums) un attiecīgi pārraksta pieprasījumu. Jums vajadzētu būt pēc iespējas precīzākam.

%1 (pretstatā $1) ir atsauce uz pirmo sagūstīto grupu pēdējā mačā CondPattern.

Bet, kā jau minēts, vai tas vispār darbojas, būs atkarīgs no pārējās jūsu lietojumprogrammas ... kā jūsu programma virzīs šos pieprasījumus (un kādas citas jums ir direktīvas).

Atsauce:

  • https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule
  • Liels paldies par jūsu palīdzību, un laiks, ko jūs izmantojat, lai palīdzētu. Esmu pamanījis dažus jūsu ieteikumus. Bet tomēr nepaveicās. Es vienkārši nevaru atbrīvoties ? no vaicājuma virknes. Es izmantoju PrestaShop. To lieto /? kā sākums vietrāža pieprasījumiem, taču dīvainu iemeslu dēļ tas tiek pārtraukts. Bet tas darbojas ar nr ?, tāpēc es vēlos pārrakstīt saites.
  • Un šie AJAX pieprasījumi ir PrestaShop trešo pušu pieprasījumi? Vai kaut kas ir atjaunināts? Es nezinu PrestaShop, baidos, bet es domāju, ka būtu iespēja noteikt URL pieņemamo formātu, piemēram, "vaicājuma virkne", "ceļš-informācija" vai "pieprasījums-uri". /?something=3213214 ir ļoti atšķirīgs no /something=3213214 - tas nav vienkārši ?. Veids, kā lietojumprogrammai jāizlasa pieprasījums, potenciāli ir ļoti atšķirīgs. (Daudziem ietvariem ir šāda iespēja, lai noteiktu, kā šādi URL tiek maršrutēti.)
  • Jā, tās ir trešo pušu funkcijas. Ja godīgi, tas notika pēc viena moduļa instalēšanas (es domāju), taču pēc atinstalēšanas un noņemšanas tas nemainījās.

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