重写URL,以便第一个文件夹将URI
问题描述:
被删除我尝试撰写该重写这个
http://my.domain.pl/subdir/a/b/c/d/foo.bar
这个
http://my.domain.pl/subdir/b/c/d/foo.bar
没有a/
一个重写规则目标网址中的文件夹。
subdir
是放置.htaccess的文件夹。该规则必须删除subdir
旁边的第一个文件夹,而不管路径后面有多少个文件夹。
因此,例如,该
http://my.domain.pl/subdir/a/b/c/d/ghi/hij/foo.bar
应rewrited这个
http://my.domain.pl/subdir/b/c/d/ghi/hij/foo.bar
为好。
我的做法
我准备的规则,但我想象它没有工作:
RewriteRule ^[^/]+/(.+)\.([^/]+)$ $1.$2 [L]
此规则rewrited
http://my.domain.pl/subdir/a/b/c/d/foo.bar
到
http://my.domain.pl/subdir/foo.bar
奇怪的是一个非常类似的规则,没有在$1.$2
的时间段,但没有一封信被重写,因为我预期。我的意思是这样的规则:
RewriteRule ^[^/]+/(.+)\.([^/]+)$ $1x$2 [L]
它rewrited这
http://my.domain.pl/subdir/a/b/c/d/foo.bar
这个
http://my.domain.pl/subdir/b/c/d/fooxbar
在逃避这样$1\.$2
规则没有帮助的时期。
问题
如何创建规则删除该路径的第一个文件夹?
答
您没有使用适当的正则表达式匹配要求uri.Try这样的:
RewriteRule ^[^/]+/(.*?)/(.+\.[^/]+)$ /subdir/$1/$2 [L]
它不工作。这个路径收缩在循环中执行几次。我的规则也是同样的问题。所以我们必须制定一个规则来处理只收缩的规则。我们可以添加一个RuleCond来检查“a”文件夹是否存在,并在存在时进行重写,但是应该知道该文件夹的名称。 – trzczy