Мне сложно создать правило перезаписи для перенаправления, используя часть старого URL-адреса для WP. Пример:
Старый URL:
http://www.example.com/news/index.php/2014/11/07/my-blog-post-from-old-site
или
http://www.example.com/news/index.php/2014/11/07/my_blog_post_from_old_site
Новый URL:
http://www.example.com/2014/11/07/my-blog-post
Новый URL должен иметь только даты и первые три элемента постоянной ссылки после удаления из тире. Если я удалю часть с заменой подчеркивания на тире, все остальное будет работать так же, как и должно.
Вот мои правила .httaccess
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / #replace underscores with dashes RewriteRule ^(/news/.*/[^/]*?)_([^/]*?_[^/]*)$ $1-$2 [N] RewriteRule ^(/news/.*/[^/]*?)_([^/_]*)$ $1-$2 [R=301] #redirect to new URL RewriteRule ^news/index\.php/([^-]+-[^-]+-[^-]+).* /$1 [R=301,L,NC] #WP standard stuff RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
Найдено, что решение полезно
Я думаю, это дорогой способ заменить подчеркивания тире. Но это работает, по крайней мере, в моей тестовой среде. Первое правило заменяет тире по одному. Второе правило затем удаляет префикс из запрошенного URL.
RewriteBase / # replace underscores with dashes RewriteRule (.+?)_(.+) $1-$2 [R=302,L] # strip "news/index.php" RewriteRule ^news/index.php/(.*) /$1 [R=302,L]