На этот вопрос уже есть ответ здесь:
Я пробовал сделать это сам, но я новичок в регулярном выражении.
У меня есть этот URL:
http://[DOMAIN]/[category]/27466-some-article-is-here
Который должен перенаправлять на этот URL:
http://[DOMAIN]/[category]/some-article-is-here
Я просто хочу удалить идентификатор из URL. Категория может быть любой, которую я хочу сохранить.
Как мне этого добиться?
ОБНОВЛЕНИЕ: Я скорректировал перенаправление с @taduuda на следующее:
RewriteRule ^(.*)\/[\d]*\-(.*)$ $1/$
Это выглядит хорошо с инструментом тестирования, но это все еще не работает на моем wordpress сайт.
Мой htaccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# BEGIN - Custom Redirects
RedirectMatch 301 /heute(.*) /$1
RewriteRule ^(.*)\/[\d]*\-(.*)$ $1/$2
# END - Custom Redirects
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Не уверен, будет ли это работать с каждым URL-адресом, который у вас есть, но это даст вам основу для работы. Обратите внимание, что при этом проверяются 5-значные идентификаторы. Если вы хотите, чтобы это было более гибко, просто замените {5}
на другой кватификатор, например *
. Также обратите внимание, что это может соответствовать URL-адресам, которые вы не хотите перенаправлять.
* Quantifier - Соответствует от нуля до неограниченного количества раз, сколько возможно раз, возвращая по мере необходимости (жадно)
Ваше правило:
RewriteEngine on
RedirectMatch 301 ^(.*)\/[\d]{5}\-(.*)$ $1/$2
Или более точный вариант, позволяющий избежать нежелательных перенаправлений:
RewriteEngine on
RedirectMatch 301 ^(.*example\.com\/.+)(?:\/[\d]{5})\-(.*)$ $1/$2
Поскольку вы упомянули, что вы новичок в регулярных выражениях, вот несколько инструментов, которые помогут вам начать работу:
Онлайн-инструмент для создания / тестирования регулярных выражений: regex101. com
Онлайн-инструмент для тестирования перезаписи файлов .htaccess: htaccess.madewithlove.be