1

我有这个链接:

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

4

3 回答 3

2

你的正则表达式是贪婪的(.*)。尝试使第一部分不贪婪:

(.*?)/(.*)
于 2012-08-05T00:36:13.910 回答
1

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ sub/stuff/$1 [NC,L,R=301]
于 2012-08-05T00:37:23.797 回答
0
^(https?:\/\/[^\/]*\/)(.*)

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

于 2017-10-23T18:21:42.343 回答