301 Перенаправление не применяется после перезаписи URL - PullRequest
1 голос
/ 09 марта 2020

Сначала я переписываю структуру URL-адресов, а не изменяю имя файла.

RewriteRule ^solar-solutions-in-india.php?$ solution.php [L]

Поэтому, когда я пытаюсь открыть ссылку, она открывается с обоих URL-адресов.

Но для целей SEO я хочу перенаправить мой старый URL.

IE solution.php на solar-solutions-in-india.php с 301.

Я пытаюсь перенаправить 301 с помощью приведенного ниже кода. Но он показывает слишком много перенаправлений.

Redirect 301 /solution.php https://www.abc.or/solar-solutions-in-india.php

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

Чтобы избежать перенаправления l oop, вам нужно только перенаправить прямые запросы, сделанные пользователем (или ботом поисковой системы), а не переписано запрос от вашего более позднего переписывания.

Попробуйте вместо этого использовать mod_rewrite в верхней части вашего .htaccess файла:

RewriteEngine On

# Redirect direct requests to old URL
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^solution\.php$ /solar-solutions-in-india.php [R=302,L]

# Internally rewrite new URL to the existing old file
RewriteRule ^solar-solutions-in-india\.php$ solution.php [L]

Условие, которое проверяется в среде REDIRECT_STATUS Переменная гарантирует, что мы нацелены только на прямые запросы, а не на переписанный запрос от более поздней перезаписи. REDIRECT_STATUS env var пуст при первоначальном запросе и имеет значение 200 (как при 200 HTTP-статусе OK) после первого успешного перезаписи.

Не забудьте экранировать буквальные точки в RewriteRule pattern (regex).

Я удалил конечный ? на RewriteRule pattern (ie. ^solar-solutions-in-india.php?$), как это выглядит как ошибка. Если только вы действительно не пытаетесь сопоставить <url>.php и <url>.ph?!

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

Примечание: Redirect - это директива mod_alias. В этом случае следует избегать смешивания перенаправлений от обоих модулей.

0 голосов
/ 09 марта 2020

Оба перенаправления генерируют бесконечное число перенаправлений l oop, поэтому вы получаете ошибку "слишком много перенаправлений".

Первая строка перенаправляет солнечные решения в Индии. php to solution. php, затем, как только решение. php получит доступ, вы говорите серверу перенаправить его на solar-solutions-in-india. php, а с первой строки вы перенаправляете его в решение. . php, у вас есть бесконечное число l oop.

Вы не можете перенаправить страницу A на страницу B и одновременно страницу B на страницу A, боюсь, вам придется удалить одну из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...