#php #wordpress #.htaccess #post #redirect
#php #wordpress #.htaccess #Публикация #перенаправление
Вопрос:
Короче говоря, я преобразовал свой старый пользовательский сайт на новый сайт WordPress, домен остался прежним, я использовал PHP для вставки тысяч старых статей с комментариями в базу данных WordPress, сохраняя ту же последовательность идентификаторов, что означает, что старые ссылки были:
www.mysite.com/index.php?id=11058
www.mysite.com/index.php?category=12
Чем новая ссылка:
Все было сделано хорошо, единственная проблема в том, что я не хочу терять старые обратные ссылки, и я хочу использовать PHP для перенаправления, например:
if (isset($_GET['old_id'])) { $id=$_GET['old_id']; $Wordpress_post_id = $id; }
Как я могу использовать этот код в WordPress? и этот метод лучше или перенаправить на .htaccess? Или есть другой способ, который лучше, чем два?
Ответ №1:
Я бы сделал это в template_redirect
:
Это действие выполняется непосредственно перед тем, как WordPress определит, какую страницу шаблона загружать. Это хороший способ, если вам нужно выполнить перенаправление с полным знанием запрошенного содержимого.
add_action(
'template_redirect',
static function() {
if(!isset($_GET['old_id'])){
return;
}
// Do custom look up here, possibly get_posts()
// Once you determine where to go, use wp_safe_redirect with the appropriate code (probably 301)
// https://developer.wordpress.org/reference/functions/wp_safe_redirect/
// Also possibly use get_permalink() to find the canonical link for the object
// https://developer.wordpress.org/reference/functions/get_permalink/
}
);
К сожалению, «пользовательский материал» действительно зависит от того, как вы хранили вещи. Это мета-сообщение, вы вручную вставляли идентификаторы сообщений, это пользовательская таблица поиска?
Если это истинное сопоставление устаревших идентификаторов с идентификаторами postID, вы даже можете использовать плагин, такой как перенаправление, с простым правилом.
Комментарии:
1. Я думаю, что лучше использовать плагин, чем самому изменять скрипт, поскольку я новичок в WordPress.
2. Я использовал функции WordPress для вставки сообщений и комментариев (wp_insert_post() и wp_insert_comment()). большое вам спасибо.
3. Если плагин перенаправления работает, я говорю, что он полностью согласен. Однако, если вы хорошо разбираетесь в PHP, этот код не нуждается в большом количестве материалов WordPress внутри.
4. Проблема в том, что я мало что знаю о том, как работает и структурирует WordPress. Вставить сообщения, комментарии и изображения было легко, потому что все, что мне нужно было сделать, это поместить их в массив, а затем использовать функции WordPress для вставки их в базу данных, но этот вопрос, перенаправление, кажется более сложным. Я попробую PHP-решение на локальном хостинге моего компьютера, если это удастся, я внедрю его на сайте. Так благодарен вам.
Ответ №2:
Поскольку вы упомянули (и отметили) .htaccess
, вы могли бы сделать это следующим образом в верхней части .htaccess
файла (перед # BEGIN WordPress
маркером комментария):
# Redirect "/index.php?id=<number>" to "/?p=<number>"
RewriteCond %{QUERY_STRING} ^id=(d )
RewriteRule ^index.php$ /?p=%1 [R=301,L]
# Redirect "/index.php?category=<number>" to "/?cat=<number>"
RewriteCond %{QUERY_STRING} ^category=(d )
RewriteRule ^index.php$ /?cat=%1 [R=301,L]
Где %1
— обратная ссылка на захваченную группу в предыдущем CondPattern в обоих случаях. т.е. значение параметров id
и category
URL соответственно.
Протестируйте с 302 (временными) перенаправлениями, чтобы избежать проблем с кэшированием.
Комментарии:
1. Я попробую.. Большое вам спасибо
Ответ №3:
Недавно мне пришлось сделать то же самое. Я реорганизовал сайт и переместил структуру из корня (и всю структуру каталогов) в папку блога. Я экспериментировал с несколькими методами для WordPress, анализировал журналы на предмет проблем и т. Д. И Реализовал следующий метод.
Сначала я создал список каждой страницы, статьи и т. Д.
Затем я создал файл .htaccess, расположенный в корневом каталоге сайта.
В моем примере ниже я показываю перенаправление для одной страницы, но с двумя записями (косая черта или нет). Нижняя часть обрабатывает файлы и директоры и т. Д.
Мой .htaccess имеет длину около 600 строк. Я не заметил никаких проблем с производительностью при перенаправлениях.
Примечание: я использую 302 для перенаправлений, если ваши являются постоянными, рассмотрите возможность использования 301.
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
RewriteRule ^aboutme$ https://www.example.com/blog/aboutme/ [L,R=302]
RewriteRule ^aboutme/$ https://www.example.com/blog/aboutme/ [L,R=302]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (. )/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Комментарии:
1. Кажется немного сложным, поскольку у меня нет большого опыта работы с .htaccess, и я боюсь ошибиться.. Мне нужно простое решение.. Спасибо
2. @AyadAttar Я не думаю, что есть простое решение для WordPress. Вы должны обрабатывать угловые случаи. В WordPress есть много способов отображения статей и страниц в виде URL-адресов. Какой бы метод вы ни выбрали, потратьте время на изучение файлов журналов, так как будут проблемы.
3. Вы абсолютно правы, простых решений не существует.. Я действительно должен приложить больше усилий, чтобы узнать, как работает WordPress.. Проблема в том, что управление сайтом, редактирование и написание новых постов не оставляют мне времени на изучение чего-то нового.. Вот почему я стараюсь сократить время и усилия, обращаясь к экспертам.. Я думаю, что проблема, с которой я сталкиваюсь, как и многие владельцы веб-сайтов, заключается в том, что они не могут сформировать команду для управления своим сайтом .. Вы не можете делать все самостоятельно.. Большое вам спасибо за совет.