Как добавить префикс /blog/ к структуре постоянных ссылок для записей блога, страниц тегов и т.д.?

5 июн. 2011 г., 03:48:53
Просмотры: 72.5K
Голосов: 25

Я использую WordPress 3.1.3 как полноценную CMS, установленную в корневой директории домена. У меня настроена статическая страница в качестве главной страницы, а блог находится по адресу http://www.example.com/blog.

Я хочу, чтобы все отдельные записи блога, страницы категорий, архивов, тегов и любые другие страницы, связанные с блогом, имели "префикс" /blog/ в структуре ссылок. То есть URL записи должен быть www.example.com/blog/post-title


На данный момент правильно работают только страницы категорий. Это было достигнуто добавлением следующей строки в файл .htaccess:

RewriteRule ^category/(.+)$ http://www.example.com/$1 [R=301,L]

Затем я установил База категорий (Category Base) как "blog" на странице настроек постоянных ссылок в WordPress. Это дает страницам категорий URL вида: www.example.com/blog/category-name (без удаления префикса категории в .htaccess, они имели URL вида category/blog/category-name).


Пытаясь настроить это для других элементов, я установил База меток (Tag Base) как "blog". Также я установил пользовательскую структуру постоянных ссылок: /blog/%postname% (как предлагалось в нескольких обсуждениях, найденных через Google).

Эти настройки дают URL-структуру, которую я ищу, для отдельных записей блога, страниц меток и архивов. Однако все они ведут к ошибкам 404.

Я удалил файл .htaccess, чтобы убедиться, что WordPress записывает в него, и это так. Если я удаляю /blog/ из структуры постоянных ссылок, всё работает правильно, но я теряю желаемую структуру URL.

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

Содержимое .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
1
Комментарии

Кстати, постоянная ссылка, отображаемая при редактировании записи, является "неправильной". Она не показывает окончательный URL.

Alexis Wilke Alexis Wilke
30 окт. 2017 г. 00:09:33
Все ответы на вопрос 2
5
33

Вы получаете ошибки 404, когда добавляете /blog/ к структуре пользовательских постоянных ссылок и одновременно добавляете /blog/ к базе категорий. Это должно быть добавлено только к одному — к структуре пользовательских постоянных ссылок.

Если вы оставите базу категорий и базу тегов пустыми и просто добавите /blog/ в начало структуры пользовательских постоянных ссылок, чтобы она выглядела так: /blog/%postname% — это даст желаемый результат.

Ваши страницы будут выглядеть так: domain.example/pagename/
URL записей будет таким: domain.example/blog/postname
URL категорий будет выглядеть так: domain.example/blog/category/postname

27 июн. 2011 г. 19:26:59
Комментарии

Хорошее замечание про добавление только в один раздел. Это решение также добавит /blog/ к страницам категорий и архивов, что хорошо. Действительно, это должно быть принятым ответом.

Ian Ian
6 июн. 2014 г. 23:44:35

Рад, что этот метод также применяется к URL страниц категорий.

Edwin Yip Edwin Yip
4 нояб. 2014 г. 07:11:06

Это должен быть принятый ответ на данный вопрос.

AndyWarren AndyWarren
17 окт. 2017 г. 16:17:52

это добавит префикс ко ВСЕМ вашим пользовательским типам записей

nodws nodws
4 мая 2018 г. 00:22:17

Обычный вопрос здесь, вероятно: Как управлять этим только для типа записей "post" и как перевести /blog, например, для разных языков? :)

trainoasis trainoasis
23 июл. 2018 г. 15:05:27
21

Перейдите в Настройки>Постоянные ссылки и добавьте это к структурам постоянных ссылок

5 июн. 2011 г. 07:35:48
Комментарии

Это было одним из первых, что я попробовал, и это приводило к ошибкам 404. Поэтому я отключил это на несколько часов и решил попробовать снова после вашего ответа. Сейчас это работает для страниц отдельных записей. Я также снова заставил работать страницы категорий. Остались только страницы тегов и архивов, которым нужно добавить /blog/ в URL.

Preston Preston
5 июн. 2011 г. 07:54:18

Если посмотреть на страницу, там есть место и для тегов. Что касается архивных страниц, вы имеете в виду страницу, которая показывает список статей, тегов, категорий и т.д., или архивные записи?

xLRDxREVENGEx xLRDxREVENGEx
5 июн. 2011 г. 07:57:45

С тегами, если я добавляю blog в поле "База тегов", это дает мне правильную структуру URL "mydomain.com/blog/tag-name", но эта страница затем выдает ошибку 404. Что касается архивов, я имею в виду страницу, которая показывает архивные записи за определенный месяц. Я хочу, чтобы URL был mydomain.com/blog/2011/05. Эта структура URL появляется, когда я нажимаю на ссылку архива, но тоже выдает ошибку 404. И теперь у меня снова ошибки 404 для отдельных записей блога. Может ли это быть вызвано проблемами с плагином?

Preston Preston
5 июн. 2011 г. 07:58:52

Правильно ли у вас настроен .htaccess?

xLRDxREVENGEx xLRDxREVENGEx
5 июн. 2011 г. 08:00:20

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

Preston Preston
5 июн. 2011 г. 08:01:31

Сначала проверьте, существует ли ваш .htaccess - если нет, вам нужно получить его содержимое и создать файл вручную.

xLRDxREVENGEx xLRDxREVENGEx
5 июн. 2011 г. 08:04:28

Это действительно существует, и я удалил другие добавленные элементы, так что осталось только то, что указано ниже (с правильными переносами строк), но я всё равно получаю ошибки 404 на всех страницах, кроме категорий.

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>

Я также благодарен вам за потраченное время на помощь.

Preston Preston
5 июн. 2011 г. 08:08:34

В следующий раз просто размещайте код в своём вопросе выше, используя теги для кода. Я отредактирую ваш пост с ним, но он не будет виден, пока модератор не проверит его. Попробуйте убрать RewriteBase / — иногда сервер не нуждается в этом или может выдавать ошибку.

xLRDxREVENGEx xLRDxREVENGEx
5 июн. 2011 г. 08:14:40

Конечно, извините за это.

Я удалил эту строку, но всё равно получаю ошибки 404, как и раньше.

Preston Preston
5 июн. 2011 г. 08:20:15

у тебя есть ссылка, чтобы я мог попробовать? если нет, ничего страшного. просто хочу проверить, проблема только у тебя или у всех. и еще, ты читал страницу кодекса по этой теме http://codex.wordpress.org/Using_Permalinks, особенно в конце?

xLRDxREVENGEx xLRDxREVENGEx
5 июн. 2011 г. 08:24:23

Конечно, я работал над разделом блога здесь ссылка. И еще пост здесь ссылка. Я еще раз посмотрю страницу про постоянные ссылки.

Preston Preston
5 июн. 2011 г. 08:32:00

вот что мне подсказал участник @toscho: он сказал попробовать добавить эту строку ^blog/category/(.+)$ вместо предыдущей

xLRDxREVENGEx xLRDxREVENGEx
5 июн. 2011 г. 08:36:11

Игнорируй последний комментарий. Если только у тебя это не работает лучше. К сожалению, я немного в тупике с этим. Ты точно уверен, что твой сервер поддерживает это?

xLRDxREVENGEx xLRDxREVENGEx
5 июн. 2011 г. 08:40:30

Кажется, у меня почти всё заработало. Я убрал "blog" из Category Base, и по какой-то причине всё, кроме страниц категорий, теперь работает. У меня теперь есть эта строка в .htaccess RewriteRule ^blog/category/(.+)$ http://www.dvorakdesigns.com/$1 [R=301,L], но страницы категорий отображаются как dvorakdesigns.com/category/category-name. Это была правильная реализация того, что дал toscho?

Preston Preston
5 июн. 2011 г. 08:46:45

И ты хочешь /blog/category/category-name или /blog/category-name

xLRDxREVENGEx xLRDxREVENGEx
5 июн. 2011 г. 08:51:39

Если возможно blog/category/category-name, это было бы идеально. В противном случае, blog/category-name тоже подойдет.

Preston Preston
5 июн. 2011 г. 08:54:34

Мне нужно подумать над этим. А пока попробуйте поискать информацию по этой теме в Google.

xLRDxREVENGEx xLRDxREVENGEx
5 июн. 2011 г. 09:04:05

Кажется, я разобрался. Все оказалось просто: нужно было добавить blog/category как основу для категорий и blog/tag как основу для меток. В файле .htaccess нужно было добавить это: RewriteRule ^category/(.+)$ http://www.dvorakdesigns.com/$1 [R=301,L] (это предотвращает формирование URL вида category/blog/category). Надеюсь, всё продолжит работать! Большое спасибо за вашу помощь.

Preston Preston
5 июн. 2011 г. 09:30:16

Звучит хорошо. Без проблем

xLRDxREVENGEx xLRDxREVENGEx
5 июн. 2011 г. 19:11:47

Это решение не работает для меня. У меня таксономия перемещается с /mytaxonomy на /blog/mytaxonomy при таком подходе, что мне не нужно. Мне нужно /blog для записей и /mytaxonomy для элементов таксономии.

Pieter Pieter
28 апр. 2013 г. 14:26:47

Это НЕВЕРНО, префикс будет добавлен ко ВСЕМ вашим пользовательским типам записей

nodws nodws
4 мая 2018 г. 00:21:19
Показать остальные 16 комментариев