mod_rewrite的。使用特殊字符重定向网址(问号)

时间:2012-05-27 09:09:12

标签: apache mod-rewrite special-characters http-status-code-301

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

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

我与该问号有什么关系?

3 个答案:

答案 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]标记。

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

答案 2 :(得分:0)

这可以帮到你:

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

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