如何使用查询字符串将 Joomla URL 重定向到另一个主机?

如何使用查询字符串将 Joomla URL 重定向到另一个主机?

我有一个 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]

答案1

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(永久)重定向。这是为了避免浏览器在测试时缓存错误的重定向。

您需要在测试之前清除浏览器缓存。

相关内容