Regex 我的apache重写仅适用于第一个文件夹级别

Regex 我的apache重写仅适用于第一个文件夹级别,regex,apache,.htaccess,Regex,Apache,.htaccess,我们有一个网站,向客户展示我们为他们制作的创意作品。我们将原始资产上传到如下路径: x.com/clients/clientName/activityname/size/ 我有一个PHP脚本,它添加了我们的品牌、联系信息和其他信息,并引入了原始创意(通常是swf对象)。它位于这个目录x.com/clients/index.php中,它接受一个查询字符串参数?path,因此它知道在哪里可以找到创造性的 我正在尝试在.htaccess中进行apache重写,这样我们的设计人员就可以直接上传到已知的文

我们有一个网站,向客户展示我们为他们制作的创意作品。我们将原始资产上传到如下路径:

x.com/clients/clientName/activityname/size/

我有一个PHP脚本,它添加了我们的品牌、联系信息和其他信息,并引入了原始创意(通常是swf对象)。它位于这个目录
x.com/clients/index.php
中,它接受一个查询字符串参数
?path
,因此它知道在哪里可以找到创造性的

我正在尝试在.htaccess中进行apache重写,这样我们的设计人员就可以直接上传到已知的文件夹结构中,但是当您转到
x.com/clients/clientName/activityname/size/
时,它应该重写为
x.com/clients/index.php?path=clientName/activityname/size/

我目前正在使用以下重写规则,该规则适用于第一个文件夹级别,例如
x.com/clients/clientName/
成功重写,但任何后续文件夹都不会

RewriteRule^clients/([^/\.]+)/?$/clients/index.php?path=$1[L]


我的正则表达式很糟糕,所以我一直在想该怎么办。感谢您的帮助。

您的正则表达式只匹配URL,如
客户端/xxxxxx/
,因为您的模式
[^/\.]+
表示
除“/”或“.”之外的一个或多个字符

根据您的规则,它不能用于其他子目录

你可以通过这个改变你的规则

RewriteRule ^clients/(.+)$ /clients/index.php?path=$1 [L]
为了避免内部服务器错误(代码500,在本例中表示无限循环),您可以这样做

RewriteRule ^clients/index\.php$ - [L]
RewriteRule ^clients/(.+)$ /clients/index.php?path=$1 [L]

你想使用正则表达式有什么特别的原因吗?在我看来,你可以捕捉到在客户之后发生的一切:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^(.*/)?index\.php$ [NC]
RewriteRule ^clients/(.*)$ /clients/index.php?path=$1 [L]

第二行是防止重定向循环,因为index.php也在文件夹/clients中,这将导致永远的重定向。

尝试使用此重写规则时,我遇到一个内部服务器错误。即使没有其他重写,也可能会出现服务器错误,因为应该添加redirect-RewriteCond之后,重写规则与自身匹配。看看我的答案,对不起,我没注意到。我编辑了我的答案以避免内部错误非常感谢您的回复。最后这对我很有效,非常感谢你的回复。这对我有用