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

时间:2012-08-05 00:33:20

标签: apache .htaccess

我有这个链接:

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文件将这些请求重定向到根文件夹到子目录,所以一切正常。并且替换所有链接不是一种选择,因为它们有超过一千个。

3 个答案:

答案 0 :(得分:2)

你的正则表达式是贪婪的(.*)。尝试让第一部分变得非贪婪:

(.*?)/(.*)

答案 1 :(得分:1)

尝试使用这个正则表达式(只有当请求的文件不存在时才会重定向到子目录中,所以如果它存在则不会无限循环):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ sub/stuff/$1 [NC,L,R=301]

答案 2 :(得分:0)

^(https?:\/\/[^\/]*\/)(.*)

第二组将包含您正在寻找的内容