【问题标题】:Mod_rewrite. Redirect url with Special Characters (question marks)Mod_rewrite。带有特殊字符(问号)的重定向网址
【发布时间】:2012-06-02 02:57:46
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    这应该对你有帮助:

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

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

    【讨论】:

    • 哇!似乎工作!谢谢!无论如何,我正在做一些测试以检查一切是否正常!
    【解决方案2】:

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

    注意:查询字符串

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

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

    【讨论】:

    • 我是菜鸟,如果可能的话,我想举个例子。我发现这个谷歌搜索。 FROM http://www.example.com/index.php?option=content&link_id={dynamic ID) TO http://www.example.com/index.html/content/?id={dynamic ID) HOW TO RewriteCond %{QUERY_STRING} ^option=content&link_id={dynamic ID)$ RewriteRule ^index\.php$ http://www.example.com/index.html/content/?id={dynamic ID)? [R=301,L] 但是代码当然是错误的..如果我使用它,服务器上的错误500(括号当然有问题)
    【解决方案3】:

    ? 字符是否已转义?尝试像这样添加NE (noescape) 标志:

    RewriteRule ^index.php?Itemid(.*)$ http://www.ligurianotizie.it/archive/index.php?Itemid$1 [L,R=301,NE]
    

    【讨论】:

    • 我真的很菜鸟,我不确定逃脱意味着什么。无论如何不,在我们必须重定向的链接中没有奇怪的字符。简单吗?您提供的代码似乎不起作用(嗯..它似乎只有从要重定向的链接中删除问号才有效,所以不是解决方案)。
    猜你喜欢
    • 2016-04-13
    • 2012-02-18
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 2012-05-18
    • 2014-07-19
    相关资源
    最近更新 更多