Как добавить префикс /blog/ к структуре постоянных ссылок для записей блога, страниц тегов и т.д.?
Я использую 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>

Вы получаете ошибки 404, когда добавляете /blog/
к структуре пользовательских постоянных ссылок и одновременно добавляете /blog/
к базе категорий. Это должно быть добавлено только к одному — к структуре пользовательских постоянных ссылок.
Если вы оставите базу категорий и базу тегов пустыми и просто добавите /blog/
в начало структуры пользовательских постоянных ссылок, чтобы она выглядела так: /blog/%postname%
— это даст желаемый результат.
Ваши страницы будут выглядеть так: domain.example/pagename/
URL записей будет таким: domain.example/blog/postname
URL категорий будет выглядеть так: domain.example/blog/category/postname

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

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

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

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

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

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

Это действительно существует, и я удалил другие добавленные элементы, так что осталось только то, что указано ниже (с правильными переносами строк), но я всё равно получаю ошибки 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>
Я также благодарен вам за потраченное время на помощь.

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

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

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

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

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

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

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

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

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

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

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