Чтобы избежать перенаправления 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. В этом случае следует избегать смешивания перенаправлений от обоих модулей.