Puncte:1

Apache mod_rewrite/mod_redirect: convertiți adresa URL cu parametrii de interogare într-o adresă URL prietenoasă cu SEO. unii parametri de interogare sunt ignorați

drapel cl

Ca mai sus.

ar putea fi explicat cel mai bine cu un exemplu:

M-am uitat/cautat pe net dar nimic nu se apropie de ceea ce incerc sa fac. Mulțumesc.

Puncte:1
drapel kz

Puteți face acest lucru în felul următor folosind mod_rewrite:

RewriteEngine Pornit

RewriteCond %{QUERY_STRING} (?:^|&)p1=([^&]+)
RewriteCond %1@%{QUERY_STRING} ^([^@]+)@(?:|.*&)p2=([^&]*)
RewriteRule ^/?(my-page)$ /$1/%1/%2 [QSD,R=302,L]

Primul condiție surprinde valoarea de p1 și trece asta celui de-al doilea condiție care captează și valoarea de p2. Acestea sunt apoi folosite în substituţie sfoară ca %1 și %2 respectiv backreferences.

Parametrii URL pot apărea în orice ordine.

@ (în a doua condiție) este doar un caracter arbitrar care nu apare în v1 și astfel este folosit ca delimitator între v1 și șirul de interogare la căutare p2.

Toți ceilalți parametri URL (de ex. p3..pN) sunt ignorate (și aruncate).

Ambii p1 și p2 trebuie să existe cu o valoare nevidă pentru ca redirecționarea să aibă loc.

ACTUALIZAȚI: p1 trebuie să existe cu o valoare nevide (în caz contrar, redirecționarea rezultată va fi ambiguă). p2 trebuie să existe, dar valoarea poate fi gol. De asemenea, am actualizat regex-ul, astfel încât să permită și un șir de interogare probabil incorect (dar încă valid) unde delimitatorul parametrului URL (&) apare înainte p2 chiar la începutul șirului de interogare. de exemplu. /pagina-mea?&p2=&p1=v1 ar fi în continuare redirecționat către /pagina-mea/v1/.

The QSD flag elimină șirul de interogare original din cerere.

În funcție de locul în care sunt utilizate aceste directive (de ex. director sau Server context) și cum este direcționată în cele din urmă adresa URL, poate fi necesar să adăugați un condiția inițială pentru a se asigura că sunt procesate numai cererile directe (spre deosebire de cererile rescrise).

De exemplu, adăugați următoarele ca primă condiție, dacă este necesar:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
:

ACTUALIZAȚI:

p1 și p2 sunt obligatorii. p3 este opțional.

Puteți modifica cele de mai sus după cum urmează:

RewriteCond %{QUERY_STRING} (?:^|&)p1=([^&]+)
RewriteCond %1@%{QUERY_STRING} ^([^@]+)@(?:|.*&)p2=([^&]+)
# Ori p3 este obligatoriu și trebuie să aibă o valoare
RewriteCond %1/%2/@%{QUERY_STRING} ^([^@]+)@(?:|.*&)p3=([^&]+) [SAU]
# SAU p3 este omis sau nu are o valoare
RewriteCond %1/%2 (.+)
RewriteRule ^/?(my-page)$ /$1/%1%2 [QSD,R,L]

A doua condiție asigură acum că există o valoare pentru p2 parametru (ex. v2) - nu poate fi gol.

Apoi, fie a treia condiție verifică dacă nu este gol p3 parametru SAU a 4-a condiție pur și simplu captează valorile atunci când p3 parametrul este fie gol, fie omis cu totul.

Redirecționarea rezultată omite slash-ul final când p3 nu este prezent. De exemplu, redirecționarea rezultată este fie /mypage/v1/v2 sau /mypage/v1/v2/v3. (Bară oblică care ar putea apărea altfel pe /mypage/v1/v2/ este evitat.)

In final substituţie șir, valorile lui %1 și %2 referințele din spate sunt puțin diferite de înainte. Acestea nu mai conțin fiecare valoare (de ex. v1 și v2). In schimb %1 conţine v1/v2 și %2 conţine fie /v3 (inclusiv prefixul slash) sau is gol (când p3 este gol sau omis).

drapel cl
lasa-ma sa incerc. mulțumesc
drapel kz
@mrjayviper Mi-am actualizat răspunsul pentru a permite un parametru `p2` _empty_ (dar încă prezent). Și pentru a permite un șir de interogare probabil malformat (dar încă valid) unde delimitatorul parametrului URL (`&`) apare imediat înainte de `p2` chiar la începutul șirului de interogare. de exemplu. `/my-page?&p2=&p1=v1` (majuscule marginale).
drapel cl
Tocmai mi-am dat seama că p3 este acum opțional. ce modificări am nevoie la modificări suplimentare trebuie să fac? deci p1 si p2 sunt obligatorii. p3 este opțional. Mulțumesc.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.