Изменить постоянные ссылки - требуется код htaccess

У меня есть блог (версия wordpress 3.01), в котором есть настраиваемые постоянные ссылки в следующем формате: /%category%/%postname%/. Например, blog.com/category/post-name/.

Мне нужно изменить постоянные ссылки на "День и имя" /%year%/%monthnum%/%day%/%postname%/ (моя тема требует, чтобы это работало правильно).

Что мне нужно написать в моем файле .htaccess, чтобы старые постоянные ссылки 301 перенаправляли на новые?

Моему сайту 9 месяцев, на нем около 500 статей.


Пример

/%category%/%postname%/ в /%postname%/

RedirectMatch 301 ^/([^/]+)/([^/]+)/$ http://www.mydomain.com/ $2

Мне нужно получить это

/%category%/%postname%/ в /%year%/%monthnum%/%day%/%postname%/

RedirectMatch 301 ???????????


person user1219402    schedule 19.02.2012    source источник


Ответы (1)


Вы не можете сделать это с файлом .htaccess, так как функция перезаписи (RewriteMap), которая могла бы сделать это, не работает в контексте .htaccess. Однако, поскольку у вас есть закрытый список и, следовательно, фиксированный список категорий, их легко сопоставить с общим сценарием перенаправления:

RewriteEngine On
RewriteBase   /

RewriteRule ^(cat1|cat2|cat3|cat4)/.*?/$ redirector.php?cat=$1&post=$2 [L,QSA]

(расширение списка кошек до полного списка категорий). Тогда redirector.php — это стандартный шаблон перенаправителя. Вы просто запрашиваете свой Wordpress D/B, чтобы определить YMD для сообщения, чтобы выдать

$server  = $_SERVER['HTTP_HOST'];
header( "Location: HTTP://$server/$year/$month/$day/$postName/", true, 302 );

перед выходом.

person TerryE    schedule 19.02.2012
comment
Привет, Терри. Если я правильно тебя понял, 1) я поместил RewriteEngine в RewriteBase / в свой файл .htaccess. 2) Делаю файл redirector.php, куда вставляю $server = $_SERVER['HTTP_HOST']; заголовок (Расположение: HTTP://$server/$year/$month/$day/$postName/, true, 302); Извините, я не так хорош в этом, - person user1219402; 19.02.2012
comment
Да, строки Rewrite находятся в вашем файле htaccess. Проблема, с которой вы сейчас сталкиваетесь, заключается в том, что если кто-то наберет http://yourdomain/wranting/Why-do-I-hate-myself/, скажем, и эта статья была опубликована 2 января 2012 года, вам нужно направить на http://yourdomain/2012/01/02/Why-do-I-hate-myself/. Где вы ищете информацию о YMD для каждой статьи? Вы либо используете Wordpress D/B, либо у вас есть массив дат публикации статей, встроенный в сценарий. Я обновлю его, чтобы показать вам, как это сделать :-) - person TerryE; 19.02.2012
comment
Хорошо, спасибо :-) Ждем - person user1219402; 19.02.2012
comment
Я только что подумал об этом. Я начал набрасывать решение, но вам нужно уметь делать минимальные скрипты на php, чтобы понять это. Если у вас этого нет, то правильный ответ извините, но вы не можете сделать это без скриптов. Тем не менее, я изменил пост, чтобы добавить PHP, и, возможно, кто-то еще может предоставить стандартный обходной путь. - person TerryE; 19.02.2012
comment
Спасибо, TerryE. Да, мои навыки работы с PHP минимальны, я понимаю некоторые основы. Жду с нетерпением - person user1219402; 19.02.2012