【问题标题】:Need help with RewriteRule Regex在 RewriteRule 正则表达式方面需要帮助
【发布时间】:2010-10-13 16:31:12
【问题描述】:

我有这个网址:http://localhost/zina/Artist%20One%20Demo?l=8&m=10&c 它需要变成:http://localhost/?p=Artist%20One%20Demol=8&m=10&c&option=com_zina&Itemid=82

我正在用这个来重写url:

RewriteRule ^zina/(.*)?(.*)$ /?p=$1&$2&option=com_zina&Itemid=82 [L,R]

但是,我最终得到的网址如下所示:http://localhost/?p=Artist%20One%20Demo/Title%20One&&option=com_zina&Itemid=82

换句话说,$2 没有与任何东西匹配。谁能告诉我为什么?

【问题讨论】:

    标签: regex apache mod-rewrite


    【解决方案1】:

    ? 是一个特殊字符(选择前一个模式的 0 或 1),.* 是贪婪的(将尽可能匹配,所以直到最后,所以 $2 将始终 em> 为空,因为 $1 会吃掉所有内容,直到行尾。

    查询字符串不在 RewriteRule 匹配的字符串中,查询字符串中的模式检查通常在 RewriteRule 之前使用 RewriteCond %{QUERY_STRING} pattern 完成。

    但是,我们不需要涉足正则表达式来获取 url 中的查询字符串:

    RewriteRule ^zina/(.*)$ /?p=$1&option=com_zina&Itemid=82 [L,R,QSA]
    

    【讨论】:

      【解决方案2】:

      这是现成的,未经测试,但看起来你没有逃避你的 ?在重写正则表达式中,以便它按字面意思对待它。

      不妨试试这个

      RewriteRule ^zina/(.*)\?(.*)$ /?p=$1&$2&option=com_zina&Itemid=82 [L,R] 
      

      【讨论】:

        猜你喜欢
        • 2011-05-10
        • 1970-01-01
        • 2021-10-19
        • 1970-01-01
        • 2012-11-30
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 2021-08-29
        相关资源
        最近更新 更多