Как перенаправить URL-адреса Joomla со строкой запроса на другой хост?

У меня есть сайт 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]
2
задан 4 May 2019 в 00:16
1 ответ
https://example.com/index.php/news/item/some-news 

Ни в одном из опубликованных вами примеров URL нет строки запроса, так что попытка найти совпадение с серверной переменной QUERY_STRING, безусловно, не увенчается успехом. Вы также пытаетесь найти совпадение с URL-путем пустого (т.е. ^$) - так что это не сработает с get-go. Часть URL-адреса, которую вы пытаетесь сопоставить, это, кажется, дополнительная информация о патнаме (также известная как "информация о пути"). Другими словами, дополнительный путь URL после существующего имени файла.

Любопытно, однако, что вы, кажется, пытаетесь перенаправить на строку запроса в вашей директиве RewriteRule? Вы также перенаправляетесь на HTTP (от HTTPS) - это намеренно?

В Apache вы можете либо исследовать серверную переменную PATH_INFO, либо просто сопоставить ее как часть нормального URL-пути, используя шаблон RewriteRule pattern. Таким образом, должно сработать одно из следующих:

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/<ничего>. И перенаправляет на тот же самый URL-путь на целевом домене.

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

Вам необходимо очистить кэш браузера перед тестированием

.
1
ответ дан 3 December 2019 в 12:29

Теги

Похожие вопросы