RegEx htaccess - 获取URL路径名的每个部分

时间:2016-12-24 16:00:48

标签: php regex .htaccess url mod-rewrite

我想创建一个RewriteRule来获取路径名URL的每个部分。

以下是一个示例示例:

假设我称这个网址为:

  

127.0.0.1/service/param1/param2/param3/param4/param5/param6

我想通过这个转换这个电话:

  

127.0.0.1/index.php?s=service&p_1=param1&p_2=param2&p_3=param3&p_4=param4&p_5=param5&pa_6=param6

我尝试了许多不同的RegEx但不幸的是没有成功。

这是我非常有信心但却失败的那个

document.getElementById(parts[2]+parts[1]).innerHTML
="<label id="+parts[2]+parts[1]+" title='"+item.description+"'>"+va+"</label>";

任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:1)

由于您的参数是可选的,因此您希望将整个捕获组设置为可选,而不仅仅是斜线。为此,我们可以使用非捕获组。

RewriteRule ^([^/]+)(?:/([^/]*))?(?:/([^/]*))?(?:/([^/]*))?(?:/([^/]*))?(?:/([^/]*))?(?:/([^/]*))?(?:/([^/]*))?$ /index.php?service=$1&p1=$2&p2=$3&p3=$4&p4=$5&p5=$6&p6=$7&p7=$8 [L]

([^/]+)捕获该服务。它不是可选的,应该始终存在。 [^/]部分匹配不是斜线的字符......我们至少匹配一个,并且尽可能多。然后我们使用(?:/([^/]*))?组来捕获每个参数。 ?:语法将组标记为非捕获。内容不会用于$x替换字符串。整个非捕获组后面的?使其成为可选参数。内部捕获组将在稍后用于替换。所有替换字符串都被替换。如果特定替换组没有匹配,则替换为空字符串。

http://example.com/service/param1/param2/param3/之类的网址会生成http://example.com/index.php?service=service&p1=param1&p2=param2&p3=param3&p4=&p5=&p6=&p7=的网址。

如果您想匹配8个以上的可选参数,最好将请求传递给php路由器。如果您将键值对作为路径段,this answer可能会对您有帮助。