Există o limită maximă pentru lungimea slug-ului?

23 mai 2012, 18:34:49
Vizualizări: 17.2K
Voturi: 14

Un client a creat recent un articol cu un slug foarte lung (90 de caractere), fără caractere speciale (în afară de liniuțe) etc.

De fiecare dată când se accesa linkul către acel articol, inclusiv prin linkurile "Previzualizare" sau "Vezi articolul" din panoul de administrare, se genera o eroare 404.

După ce am scurtat manual slug-ul, totul a funcționat corespunzător. Este aceasta o "caracteristică" sau un "bug"?

EDIT: O notă pentru cei care menționează limitele bazei de date.

Dacă aș fi depășit limita câmpului din baza de date, atunci slug-ul în sine ar fi fost trunchiat. Gândiți-vă un moment. În cazul majorității instalărilor WP, wp_posts.post_name este VARCHAR(200). Deci, să presupunem că cineva introduce un titlu cu > 200 de caractere. Ce se întâmplă? Slug-ul este trunchiat la 200 de caractere și stocat în wp_posts.post_name. Nu e ca și cum cineva introduce manual titlul complet al articolului în bara de adrese a browserului, înlocuind spațiile cu liniuțe, nu? URL-ul este generat de WordPress, care îl ia din tabela wp_posts.post_name și îl pune în atributul href al tag-ului anchor. Deci nu poate exista o discrepanță acolo. Discuția despre baza de date este o heringă roșie.

În orice caz, slug-ul în cauză are doar 90 de caractere, deci nu are nicio legătură cu limitele bazei de date.

Există limitări cunoscute ale sistemului de rewrite?

1
Comentarii

Puteți folosi un instrument gratuit precum MySQL Workbench pentru a verifica tipul de date (și lungimea maximă, dacă este cazul) al oricărui câmp WordPress, așa cum este definit în tabelul/coloana corespunzătoare din WordPress

Jordi Cabot Jordi Cabot
23 mai 2012 19:13:11
Toate răspunsurile la întrebare 3
2
11

Datorită structurii tabelului wp_posts, lungimea coloanei post_name (coloana pentru slug-uri) este egală cu 200 de caractere.

23 mai 2012 18:48:16
Comentarii

@TomAuger & Eugene - puteți confirma problema, pentru că Tom spune că slug-ul avea 90 de caractere. Știu că limita este de 200, dar asta nu include URL-ul principal, nu-i așa?

brasofilo brasofilo
23 mai 2012 19:39:40

@Eugene, exact. 200 de caractere. Slug-ul meu avea exact 90 de caractere, deci nu depășim limita din baza de date.

Tom Auger Tom Auger
23 mai 2012 23:13:21
1

Presupun că nu are o limită în sine, dar proprietatea câmpului în baza de date pentru slug-uri ar putea fi setată la o lungime maximă.

Deci verifică baza de date!

23 mai 2012 18:50:54
Comentarii

@Cel care a dat vot negativ: Răspunsul este corect. Prin urmare, am dat din nou vot pozitiv.

kaiser kaiser
23 mai 2012 22:32:13
6

Probabil problema nici măcar nu a fost direct legată de WordPress sau de baza de date...

Ci lungimea URL-ului a depășit 255 de caractere (și nu toate browserele web acceptă asta).

Ceea ce s-a întâmplat aici ar fi putut fi un URL mai lung de 255 de caractere, care a fost trunchiat de bara de adrese a browserului la deschidere... ceea ce a dus la preluarea unui permalink incorect... și la un eroare 404.

Deci, probabil lungimea maximă a slug-ului ar putea fi:

255 - lungimea (Protocol + FQDN + structura permalinkului)...

  • pe baza unei limite hard impuse de browser.

Dar nu poate fi mai lung de 200 de caractere...

  • pe baza dimensiunii câmpului post_name.

Chiar dacă altceva ar fi putut cauza eroarea 404 în acest caz particular.

Ar fi putut fi și un caracter care nu a fost codat corect prin url_encode, motivele pentru erori 404 sunt aproape infinite... ai luat vreodată în considerare un cluster defect pe HDD sau un modul de RAM defect? :)

30 mai 2012 07:28:42
Comentarii

GUID-ul nu este URL-ul. Doar că arată ca unul, dar nu este folosit pentru a citi o cerere. Dacă muți WordPress de pe un domeniu pe altul, GUID-ul nu va fi schimbat. Vezi http://core.trac.wordpress.org/ticket/6492 și http://core.trac.wordpress.org/ticket/10857.

fuxia fuxia
30 mai 2012 07:41:59

Păi, pentru ce altceva decât scopuri de identificare ar trebui folosit un ID unic atunci? Adică, întrebarea practic este: Care este motivul pentru care este aruncată o eroare 404 în acest caz?

Martin Zeitler Martin Zeitler
30 mai 2012 08:32:37

Eroarea 404 și GUID-ul nu sunt legate, cred. WordPress pur și simplu nu folosește GUID-ul atunci când caută un articol care să corespundă unui URL.

fuxia fuxia
30 mai 2012 08:46:30

Cred că ai dreptate în privința asta... post_name și GUID pot fi excluse ca surse ale problemei - ce rămâne sunt permalink-urile și re-scrierile. Fără fișierele de log Apache sau altceva, asta este doar o presupunere ;)

Martin Zeitler Martin Zeitler
30 mai 2012 08:58:46

@syslogic Cred că re-scrierile sunt probabil cauza și merită investigat mai departe. URL-ul, inclusiv partea cu http://, era încă sub 128 de caractere, așa că nu cred că depășește limita dură a browserului privind lungimea URL-ului.

Tom Auger Tom Auger
31 mai 2012 16:59:28

@TomAuger dacă e atât de scurt, concluzia mea s-ar putea să nu se aplice - voiam doar să subliniez și această posibilitate. Se pare că această întrebare nu poate fi răspunsă fără acces FTP/mySQL.

Martin Zeitler Martin Zeitler
31 mai 2012 18:20:27
Arată celelalte 1 comentarii