我有这个链接:
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文件将这些请求重定向到根文件夹到子目录,所以一切正常。并且替换所有链接不是一种选择,因为它们有超过一千个。
答案 0 :(得分:2)
你的正则表达式是贪婪的(.*)
。尝试让第一部分变得非贪婪:
(.*?)/(.*)
答案 1 :(得分:1)
尝试使用这个正则表达式(只有当请求的文件不存在时才会重定向到子目录中,所以如果它存在则不会无限循环):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ sub/stuff/$1 [NC,L,R=301]
答案 2 :(得分:0)
^(https?:\/\/[^\/]*\/)(.*)
第二组将包含您正在寻找的内容