我有一个joomla的网站,我需要重定向(301)一些链接
它们采用这种形式(index.php?Itemid =识别它们 - 不应该重定向所有没有此部分的链接)
/index.php?Itemid=544&catid=331:savona&id=82356:smembramento-dei-cantieri-baglietto-di-varazze-lopposizione-delle-maestranze&option=com_content&view=article
这应该有效
RewriteRule ^index.php?Itemid(.*)$ http://www.ligurianotizie.it/archive/index.php?Itemid$1 [L,R=301]
但第一个? (问号)似乎会引起问题。
事实上,如果我们认为链接没有问号
/index.phpItemid=544&catid=331:savona&id=82356:smembramento-dei-cantieri-baglietto-di-varazze-lopposizione-delle-maestranze&option=com_content&view=article
我会用
RewriteRule ^index.phpItemid(.*)$ http://www.ligurianotizie.it/archive/index.php?Itemid$1 [L,R=301]
一切都很完美。但不幸的是,真正的链接有问号,我必须找到解决方案。
我与该问号有什么关系?
答案 0 :(得分:2)
?
字符是否已转义?尝试添加NE
(noescape)标志,如下所示:
RewriteRule ^index.php?Itemid(.*)$ http://www.ligurianotizie.it/archive/index.php?Itemid$1 [L,R=301,NE]
答案 1 :(得分:0)
问号背后的部分是查询字符串。您可以使用RewriteCond
来确定它是否为空,并根据该决定重定向。
注意:查询字符串
模式不会与查询字符串匹配。相反,您必须使用带有%{QUERY_STRING}变量的RewriteCond。但是,您可以在替换字符串中创建包含查询字符串部分的URL。只需在替换字符串中使用问号,即表示应将以下文本重新注入查询字符串。如果要删除现有查询字符串,请仅使用问号结束替换字符串。要将新查询字符串与旧查询字符串组合,请使用[QSA]标记。
答案 2 :(得分:0)
这可以帮到你:
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} Itemid
RewriteRule ^index.php(.*)$ http://www.ligurianotizie.it/archive/index.php$1 [L,R=301]
包含“Itemid”的每个链接都将被重定向,其他链接则不会重定向。