2

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

一切都很完美。但不幸的是,真正的链接有那个问号,我必须找到一个解决方案。

我和那个问号有什么关系?

4

3 回答 3

2

?角色逃脱了吗?尝试NE像这样添加 (noescape) 标志:

RewriteRule ^index.php?Itemid(.*)$ http://www.ligurianotizie.it/archive/index.php?Itemid$1 [L,R=301,NE]
于 2012-05-27T10:14:52.583 回答
0

这应该可以帮助您:

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} Itemid
RewriteRule ^index.php(.*)$ http://www.ligurianotizie.it/archive/index.php$1 [L,R=301]

每个包含“Itemid”的链接都会被重定向,其他的不会。

于 2012-05-27T12:51:25.280 回答
0

问号后面的部分是查询字符串。您可以使用RewriteCond它来确定它是否不为空,并据此做出重定向的决定。

注意:查询字符串

模式不会与查询字符串匹配。相反,您必须使用带有 %{QUERY_STRING} 变量的 RewriteCond。但是,您可以在包含查询字符串部分的替换字符串中创建 URL。只需在替换字符串中使用问号,即可指示应将以下文本重新注入到查询字符串中。当您想删除现有的查询字符串时,只用问号结束替换字符串。要将新查询字符串与旧查询字符串组合,请使用 [QSA] 标志。

来源:http ://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

于 2012-05-27T10:25:41.170 回答