Пользовательские постоянные ссылки WordPress с использованием .htaccess

В настоящее время я добавил настраиваемую структуру для сообщений premalinks /post/%post_id% через настройки постоянных ссылок в Admin.

Поскольку мне нужно переписать постоянные ссылки для категорий, тегов и страниц авторов следующим образом:

категории

Текущий /post/category/category_name в /category_name

Теги

Current /post/tag/tag_name для tag/tag_name

автор

Текущее /post/author/author_username /author/author_username

Я попытался создать пользовательский RewriteRule в .htaccess, который не работал вообще:

 RewriteRule ^/([^/]*)$ ./post/category/$1 [L] RewriteRule ^/tag/([^/]*)$ ./post/tag/$1 [L] RewriteRule ^/author/([^/]*)$ ./post/auhtor/$1 [L] 

Любая помощь в кодировании правил .htaccess для достижения таких постоянных ссылок очень ценится.

  1. Убедитесь, что вы перезаписываете движок в своей конфигурации apache
  2. Войдите в свой WordPress с правами администратора и перейдите в «Настройки» -> «Постоянная ссылка», как показано на трех изображениях. введите описание изображения здесь
  3. Если постоянная ссылка не обновляется, то у вас нет доступа на запись к корневому веб-сайту или переписанный модуль apache не включен.
  4. Если появляется сообщение о постоянной ссылке, это означает, что он также создал .htaccess в корневом каталоге сайта WordPress.

Таким образом, вы можете достичь следующих форматов URL:

категории

 category/category_name 

Теги

 tag/tag_name 

автор

 /author/author_username 

Примечание: всегда рекомендуется использовать префикс url, поэтому для категории префикс категории / должен добавляться в путь, а не напрямую обращаться к нему, потому что у WordPress есть страница и сообщение, к которым обращаются напрямую без префикса.

Я не тестировал WordPress, но с http://htaccess.mwl.be/

Вы были довольно близки:

 RewriteRule ^([^/]+)$ /post/category/$1 [L] RewriteRule ^tag/([^/]+)$ /post/tag/$1 [L] RewriteRule ^author/([^/]+)$ /post/author/$1 [L] 

Я не тестировал WordPress, но с http://htaccess.mwl.be/

 Options -MultiViews RewriteEngine On RewriteBase / RewriteRule ^/([^/]*)$ ./post/category/$1 [L] RewriteRule ^/tag/([^/]*)$ ./post/tag/$1 [L] RewriteRule ^/author/([^/]*)$ ./post/auhtor/$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] 

Если вы не делаете довольно высокоэффективный проект, я бы настоятельно предложил noch возиться со стандартным .htaccess WordPress и вместо этого использовать внутренние функции WordPress для выполнения той же задачи. Несмотря на более чистый проект, это также сделает ваше решение Webserver агностиком (кто знает, хотите ли вы переключиться на NGINX или что-то еще в будущем).

Главная функция WordPress, которая должна помочь вам совсем немного – add_rewrite_rule . В качестве примера ваша ссылка категории может выглядеть так:

  // place this rule inside function.php add_action("init", function() { add_rewrite_rule('^([^/]+)/?', 'index.php?category_name=$matches[1]', 'top'); }); 

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

Важное примечание из документов wordpress: добавив новые правила, вы должны очистить таблицу правил. Из экранов администрирования WordPress выберите «Настройки» -> «Постоянная ссылка» и просто нажмите «Сохранить изменения» без каких-либо изменений.

Существует также плагин под названием Rewrite . Поскольку он не был обновлен в течение длительного времени, я бы не предложил его использовать в Production, но его код мог бы служить источником вдохновения.