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

Php RegEx htaccess-获取URL路径名的每个部分,php,regex,.htaccess,url,mod-rewrite,Php,Regex,.htaccess,Url,Mod Rewrite,我想创建一个重写规则来获取路径名URL的每个部分 以下是一个示例: 假设我将此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 我尝试了很多不同的正则表达式,但不幸的是没有成功 这是一个我很

我想创建一个重写规则来获取路径名URL的每个部分

以下是一个示例:

假设我将此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

我尝试了很多不同的正则表达式,但不幸的是没有成功

这是一个我很有信心,但它失败了

RewriteRule ^(str)[/]?(.*)[/]?(.*)[/]?(.*)[/]?(.*)[/]?(.*)[/]?(.*)$ /index.php?s=$1&p_1=$2&p_2=$3&p_3=$4&p_4=$5&p_5=$6&p_6=$7 [L,NC,QSA]

任何帮助都将不胜感激

因为您的参数是可选的,所以您希望使整个捕获组都是可选的,而不仅仅是斜杠。为了实现这一点,我们可以使用非捕获组

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/
将生成一个url作为
http://example.com/index.php?service=service&p1=param1&p2=param2&p3=param3&p4=&p5=&p6=&p7=


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

这些参数是可选的吗?几乎可以肯定没有这样的选项,但您可以使用PHP轻松地做到这一点。只需将所有规则重写到
index.php
文件中,然后在该php文件中进行拆分,您的URL中没有
str
<代码>(服务)[/]?(.*)[/]?(.*)[/]?(.*)[/]?(.*)[/]?(.*)[/]?(.*)应该这样做。
/
也不需要在字符类中,您可能需要
/
和介于之间的值。e、 g.
(服务)/(.+?)/(.+?)/(.+?)/(.+?)/(.+?)/(.*)$
@Sumurai8是的,有。@chris85我要试试!谢谢谢谢你,伙计!我得到了它!顺便说一下,请欣赏正则表达式的解释。