Есть ли максимальная длина для слага (slug)?

23 мая 2012 г., 18:34:49
Просмотры: 17.2K
Голосов: 14

Клиент создал пост с очень длинным слагом (90 символов), без специальных символов (кроме дефисов) и т.д.

При переходе по ссылке на этот пост, включая "Предпросмотр" или "Посмотреть запись" в админке, возникала ошибка 404.

После ручного сокращения слага всё заработало как положено. Это "фича" или "баг"?

РЕДАКТИРОВАТЬ: Примечание для всех, кто говорит о лимитах базы данных.

Если бы я достиг лимита поля в БД, то слаг был бы автоматически обрезан. Подумайте об этом секунду. В большинстве установок WP wp_posts.post_name имеет тип VARCHAR(200). Если кто-то введёт заголовок длиннее 200 символов, что произойдёт? Слаг обрежется до 200 символов и сохранится в wp_posts.post_name. Ведь никто не вводит полный заголовок поста в адресную строку браузера, заменяя пробелы на дефисы, верно? URL генерируется WordPress, который берёт его из поля wp_posts.post_name и просто вставляет в атрибут href тега ссылки. Так что несоответствия здесь быть не может. Вся эта тема с БД - ложный след.

В любом случае, обсуждаемый слаг имеет всего 90 символов, так что это точно не связано с ограничениями БД.

Есть ли какие-то известные ограничения, связанные с rewrite?

1
Комментарии

Вы можете использовать бесплатный инструмент, например MySQL Workbench, чтобы проверить тип данных (и максимальную длину, если она есть) любого поля WordPress, как оно определено в соответствующей таблице/столбце WordPress

Jordi Cabot Jordi Cabot
23 мая 2012 г. 19:13:11
Все ответы на вопрос 3
2
11

Из-за структуры таблицы wp_posts длина столбца post_name (столбец для слагов) составляет 200 символов.

23 мая 2012 г. 18:48:16
Комментарии

@TomAuger и Eugene - можете подтвердить проблему, потому что Том говорит, что slug содержал 90 символов. Я знаю, что лимит составляет 200, но это не учитывает домашний URL, верно?

brasofilo brasofilo
23 мая 2012 г. 19:39:40

@Eugene, именно так. 200 символов. Мой slug был ровно 90 символов, так что мы не достигаем лимита базы данных.

Tom Auger Tom Auger
23 мая 2012 г. 23:13:21
1

Я предполагаю, что само по себе ограничение отсутствует, но свойство поля в базе данных для слагов может иметь установленную максимальную длину.

Поэтому проверьте базу данных!

23 мая 2012 г. 18:50:54
Комментарии

@Тот, кто поставил минус: Ответ правильный. Поэтому я вернул плюс.

kaiser kaiser
23 мая 2012 г. 22:32:13
6

Возможно, проблема вообще не была напрямую связана с WordPress или базой данных...

Но длина URL превысила 255 символов (и не все веб-браузеры это поддерживают).

Что могло произойти здесь — это URL длиннее 255 символов, который был обрезан адресной строкой браузера при открытии... что привело к получению некорректной постоянной ссылки... и, как следствие, к ошибке 404.

Таким образом, предположительно, максимальная длина слага может быть:

255 - длина (Протокол + FQDN + структура постоянной ссылки)...

  • на основе жесткого ограничения браузера.

Но она не может быть длиннее 200 символов...

  • на основе размера поля post_name.

Даже если в данном конкретном случае что-то другое могло вызвать ошибку 404.

Это мог быть символ, который не был правильно закодирован в URL, причины ошибок 404 довольно бесконечны... вы когда-нибудь задумывались о плохом кластере на HDD или неисправном модуле RAM? :)

30 мая 2012 г. 07:28:42
Комментарии

GUID — это не URL. Он просто выглядит как URL, но не используется для обработки запросов. Если вы переносите WordPress с одного домена на другой, GUID не изменится. Смотрите http://core.trac.wordpress.org/ticket/6492 и http://core.trac.wordpress.org/ticket/10857.

fuxia fuxia
30 мая 2012 г. 07:41:59

Хм, а для чего ещё, кроме идентификации, должен использоваться уникальный идентификатор? Вопрос в том: почему в этом случае возникает ошибка 404?

Martin Zeitler Martin Zeitler
30 мая 2012 г. 08:32:37

404 и GUID не связаны, я думаю. WordPress просто не использует GUID при поиске записи, соответствующей URL.

fuxia fuxia
30 мая 2012 г. 08:46:30

Думаю, ты прав насчёт этого... post_name и GUID можно исключить как источник проблемы - остаются только постоянные ссылки и перезаписи. Без логов Apache или чего-то подобного это просто гадание на кофейной гуще ;)

Martin Zeitler Martin Zeitler
30 мая 2012 г. 08:58:46

@syslogic Я думаю, что перезаписи, скорее всего, являются причиной и требуют дальнейшего исследования. URL, включая часть http://, всё ещё был короче 128 символов, так что вряд ли это достигает жёсткого ограничения браузера на длину URL.

Tom Auger Tom Auger
31 мая 2012 г. 16:59:28

@TomAuger если он такой короткий, то мой вывод может не подходить - просто хотел указать и на эту возможность. Похоже, этот вопрос нельзя решить без доступа к FTP/mySQL.

Martin Zeitler Martin Zeitler
31 мая 2012 г. 18:20:27
Показать остальные 1 комментариев