Htaccess редирект не работает на моем WordPress - PullRequest
0 голосов
/ 30 августа 2018

Я борюсь с проблемой перенаправления. Я не знаком с этим, и я пытался решить эту проблему более недели, но не смог найти ответ, несмотря на большой поиск в Google.

Позвольте мне объяснить: Клиент только что попросил меня создать 3 новых веб-сайта с содержимым исходного (он хотел разделить оригинальный веб-сайт на три новых). Все они используют WordPress.

Теперь, когда все три домена готовы, я должен перенаправить все страницы исходного сайта на страницу нового сайта, используя .htaccess.

Пример:

На исходном сайте у меня есть пользовательский тип сообщения с именем «FAQ», URL которого выглядит следующим образом:

https://old-site.fr/?faqs=name-of-my-question/

и я хочу, чтобы он перенаправил на:

https://faq.new-site.com/name-of-my-question/

Я пытался с 301 перенаправлениями, но ничего не получалось.

Вот последний синтаксис, который я пробовал:

Redirect 301 ^/?faqs=name-of-my-question https://faq.new-site.com/name-of-my-question

Вот полный код .htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Redirect 301 ^/index.php?faqs=name-of-my-question https://faq.new-site.com/name-of-my-question

</IfModule>

# END WordPress

Все равно ничего ... Как проверить, включен ли mod_rewrite?

Ничего не работает ... и мне нужна помощь!

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вот последний синтаксис, который я пробовал:

Redirect 301 ^/?faqs=name-of-my-question https://faq.new-site.com/name-of-my-question

Директива mod_alias Redirect не соответствует строке запроса, поэтому она никогда не будет соответствовать. И второй аргумент не является регулярным выражением, поэтому ^/? недопустимо.

Чтобы соответствовать строке запроса, вам нужно использовать mod_rewrite (директивы RewriteRule и RewriteCond). Поскольку вы используете WordPress, который имеет свои собственные директивы mod_rewrite, то вы также должны использовать mod_rewrite. (Не рекомендуется смешивать перенаправления как с mod_alias, так и с mod_rewrite, так как вы можете получить неожиданные конфликты.)

Любое перенаправление, которое вы добавляете в .htaccess, должно идти перед существующими директивами WordPress. то есть. До раздела # BEGIN WordPress.

Попробуйте вместо этого что-то вроде следующего:

# REDIRECT: https://old-site.fr/?faqs=name-of-my-question/
#       TO: https://faq.new-site.com/name-of-my-question/
RewriteCond %{HTTP_HOST} ^old-site\.fr [NC]
RewriteCond %{QUERY_STRING} ^faqs=name-of-my-question/
RewriteRule ^$ https://faq.new-site.com/name-of-my-question/ [R=302,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
:

Если name-of-my-question является просто заполнителем для любого вопроса, то вы можете сделать более обобщенный любой вопрос , как показано ниже:

# REDIRECT: https://old-site.fr/?faqs=<any-question>/
#       TO: https://faq.new-site.com/<any-question>/
RewriteCond %{HTTP_HOST} ^old-site\.fr [NC]
RewriteCond %{QUERY_STRING} ^faqs=([a-z-]+)/
RewriteRule ^$ https://faq.new-site.com/%1/ [R=302,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
:

Если old-site.fr и new-site.com находятся на разных серверах, вы можете удалить начальное условие, которое проверяет соответствие HTTP_HOST.

Обратная ссылка %1 во второй подстановке RewriteRule захватывает <name-of-my-question> из строки запроса.

Обратите внимание, что это 302 (временные) перенаправления. Измените его на 301 (постоянный) только после того, как вы проверили, что он работает нормально (во избежание проблем с кэшированием) - если действительно предполагается, что он постоянный .


UPDATE:

... это не сработало.

Попробуйте изменить шаблон RewriteRule с ^$ на ^(index\.php)?$. Другими словами:

RewriteRule ^(index\.php)?$ https://faq.new-site.com/name-of-my-question/ [R=302,L]
0 голосов
/ 30 августа 2018

Может быть попробовать это:

Redirect 301 ^/index.php?faqs=name-of-my-question https://faq.new-site.com/name-of-my-question

Или просто попробуйте полный URL, чтобы просто отладить, если проблема mod_rewrite, например.

Redirect 301 https://old-site.fr/?faqs=name-of-my-question/ https://faq.new-site.com/name-of-my-question

Также проверьте, если RewriteEngine On, и это правило после или до того, как WordPress сгенерировал правила.

...