У меня есть сайт Joomla, и я пытался сделать перенаправление URL-адресов с запросом, поэтому, когда кто-то вводит
https://example.com/index.php/news/item/some-news
они перенаправляются на
http://new.example.com/index.php/news/item/some-news
Я пробовал этот код, но не работает
RewriteCond %{HTTP_HOST} =example.com [NC]
RewriteCond %{QUERY_STRING} (news/item)
RewriteRule ^$ http://new.example.com/?%{QUERY_STRING} [R=301,L]
https://example.com/index.php/news/item/some-news
Ни в одном из опубликованных вами примеров URL-адресов нет строки запроса, поэтому пытайтесь сопоставить QUERY_STRING
серверная переменная непременно завершится ошибкой. Вы также пытаетесь сопоставить пустой URL-путь (т.е. ^$
) - так что это не сработает с самого начала. Часть URL-адреса, который вы пытаетесь сопоставить, похоже, дополнительная информация о пути (он же «информация о пути»). Другими словами, дополнительный URL-путь после существующего имени файла.
Любопытно, однако, что вы, похоже, пытаетесь перенаправить на строку запроса в своем RewriteRule
директива? Вы также перенаправляетесь на HTTP
(из HTTPS
) - это намеренно?
На Apache вы можете либо изучить PATH_INFO
серверной переменной или просто совпадать как часть обычного URL-пути с помощью RewriteRule
шаблон. Итак, одно из следующих должно работать:
RewriteCond %{HTTP_HOST} =example.com [NC]
RewriteCond %{PATH_INFO} ^/news/item/
RewriteRule ^index\.php http://new.example.com%{REQUEST_URI} [R=302,L]
ИЛИ,
RewriteCond %{HTTP_HOST} =example.com [NC]
RewriteRule ^index\.php/news/item/ http://new.example.com%{REQUEST_URI} [R=302,L]
Согласно вашей директиве, условие этого перенаправления просто соответствует /index.php/news/item/<anything>
. И перенаправляет на тот же URL-путь в целевом домене.
Это 302-е (временное) перенаправление. Измените это на 301 (постоянное) перенаправление только после того, как подтвердите, что он работает нормально. Это сделано для того, чтобы браузер не кешировал ошибочные перенаправления во время тестирования.
Перед тестированием вам необходимо очистить кеш браузера.