Apache 正则表达式匹配url中的第一个斜杠以提取后面的所有内容

Apache 正则表达式匹配url中的第一个斜杠以提取后面的所有内容,apache,.htaccess,Apache,.htaccess,我有这个链接: http://mysite.com/subdirectory/something/stuff/index.php 我可以使用哪个正则表达式只匹配第一个斜杠,这样我就可以使用表示找到的项的$1或$2变量提取它后面的所有内容?这样它将返回“subdirectory/something/stuff/index.php” 例如,我想到使用这个正则表达式: (.*)/(.*) 但是每次斜杠都会重复,所以当我使用$2时,它只会返回url的最后一部分(在本例中是index.php) 我使用

我有这个链接:

http://mysite.com/subdirectory/something/stuff/index.php
我可以使用哪个正则表达式只匹配第一个斜杠,这样我就可以使用表示找到的项的$1或$2变量提取它后面的所有内容?这样它将返回“subdirectory/something/stuff/index.php”

例如,我想到使用这个正则表达式:

(.*)/(.*)
但是每次斜杠都会重复,所以当我使用$2时,它只会返回url的最后一部分(在本例中是index.php)

我使用的语言是apache(?),它将放在一个.htaccess文件中

提前谢谢

编辑:
好的,这方面的背景是,我在子目录中有一些文件使用“/files/test.php”之类的链接链接到其他文件,因为这些文件希望其他目录位于根文件夹中,但在我的站点上它们不是。因此,我考虑使用htaccess文件将这些请求重定向到根文件夹到子目录,以便一切正常。替换所有链接不是一个选项,因为有一千多个链接。

您的正则表达式是贪婪的
(.*)
。尝试将第一部分设置为非贪婪:

(.*?)/(.*)

尝试此正则表达式(仅当请求的文件不存在时,它才会重定向到子目录stuff,因此如果它存在,它不会无限循环):


第二组将包含您要查找的内容

当我使用$1时,我将进入一个无限重定向循环。当我使用$2时,我最后得到的是“index.php”,而不是完整路径。我认为获得无限循环的问题是需要添加一个RewriteCond,因为您希望将包含/的内容重定向到另一个包含/的内容。我错了吗?我想你可能是对的,至少部分是对的。但我不熟悉RewriteCond值,因为我对apache语言相当陌生,所以我应该在那里输入什么呢?我已经为此工作了两天了,我就是不知道该怎么办。此外,如果我们以下面的例子为例,那么$1不就是返回到我的站点的链接吗$1将包含dir,$1将包含subdir/file.php。我不能真正帮助你重写cond,因为这取决于你试图重定向到什么。看到了,好吧,但请求可以是我网站上的任何文件夹,所以当我使用一个条件时,我必须为每个可能的重定向添加一个。也许我原帖中的编辑让事情更容易理解。谢谢不,由于某些对我不起作用的原因,当我在正则表达式中使用$2时,我最终只使用了“index.php”。对于您的示例URL,您能否提供相应的
$1
$2
?当您使用正则表达式时,$1和$2的值取决于使用正则表达式字符串发现的内容,因此,在本例中,$1将匹配在正则表达式中找到的“(.*)”,在我的链接中,而$2将匹配找到的“(.*)”,在链接中应该是“subdirectory/something/stuff/index.php”,但不是出于某种奇怪的原因。是的,这确实有效,但仅适用于此url。url可以是任何内容,因此斜杠的数量可能不同。斜杠的数量会有什么不同?
//
指的是
协议中的斜杠://
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ sub/stuff/$1 [NC,L,R=301]
^(https?:\/\/[^\/]*\/)(.*)