【问题标题】:Regex to separate end of string after comma for apache rewrite正则表达式在逗号后分隔字符串的结尾以进行 apache 重写
【发布时间】:2013-12-07 10:06:35
【问题描述】:

我有一个有效的重写规则,它将两个数值提取为 $1:

示例网址:http://somedomain.tld/fixedtext-1,2-anytext

RewriteRule ^fixedtext-([0-9\,]+).+$ /skript.php?id=$1

所以 id 用 1,2 填满,这很好

我需要在字符串的末尾添加另一个值,用“,”分隔

示例网址:http://somedomain.tld/fixedtext-1,2-anytext,3

那么如何将“3”访问为 $2?

RewriteRule _____________ /skript.php?id=$1&other_id=$2

另一方面,如果没有给出最后一个参数,正则表达式也必须有效

/fixedtext-1,2-anytext

应该仍然有效。

我试过了

RewriteRule ^fixedtext-([0-9\,]+).+,([0-9]+)$ /skript.php?id=$1&other_id=$2

只有在设置了最后一个参数时才有效

更新:

好的,同时我有两个解决方案,都适用于 apache 1.3,但不适用于 apache2:

RewriteCond %{REQUEST_URI} (,([0-9]+))?/?$
RewriteRule ^fixedtext-([0-9,]+) /skript.php?id=$1&other_id=%2 [L,QSA]

RewriteRule ^fixedtext-([0-9\,]+).+,([0-9]+)$ /skript.php?id=$1&other_id=$2 [L]
RewriteRule ^fixedtext-([0-9\,]+).+$ /skript.php?id=$1 [L]

所以仍然需要一个适用于两个 apache 版本的解决方案。

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite apache-1.3


    【解决方案1】:

    使用这条规则:

    RewriteCond %{REQUEST_URI} (,([0-9]+))?/?$
    RewriteRule ^fixedtext-([0-9,]+) /skript.php?id=$1&other_id=%2 [L,QSA]
    

    这匹配 URI 末尾的可选 ,number 并将其传递给 $2

    【讨论】:

    • 不幸的是这不起作用,我得到“500 Internal Server Error”
    • 这是经过测试的规则。你还有什么其他规定吗?
    • 是的,但对于其他 URL。即使我删除它们,这也不起作用,所以这不应该是原因
    • Asi 说这是经过适当测试的规则,因此这是由于您现有的规则排除了代码。对于 500,您需要检查 Apache 的错误日志。
    • 从error.log:.htaccess: RewriteRule: 无法编译正则表达式'^fixedtext-([0-9,]+).*?(?:,([0-9]+ ))?/?$'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多