我想创建一个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>";
任何帮助都会非常感激!
答案 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可能会对您有帮助。