重写URL,以便从URI中删除第一个文件夹

时间:2017-06-02 04:29:38

标签: apache .htaccess mod-rewrite url-rewriting

问题

我尝试编写一个重写此

的RewriteRule
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

应该重新写入此

http://my.domain.pl/subdir/b/c/d/ghi/hij/foo.bar

我的方法

我准备了规则,但它没有像我预期的那样工作:

RewriteRule ^[^/]+/(.+)\.([^/]+)$ $1.$2 [L]

此规则重写

http://my.domain.pl/subdir/a/b/c/d/foo.bar

http://my.domain.pl/subdir/foo.bar

奇怪的是一个非常相似的规则,在$1.$2没有句号,但没有任何一封信按照我的预期重写。我的意思是这样一条规则:

RewriteRule ^[^/]+/(.+)\.([^/]+)$ $1x$2 [L]

它重写了这个

http://my.domain.pl/subdir/a/b/c/d/foo.bar

进入这个

http://my.domain.pl/subdir/b/c/d/fooxbar

$1\.$2一样逃避规则中的句号并没有帮助。

问题

如何创建规则以删除路径的第一个文件夹?

1 个答案:

答案 0 :(得分:0)

您没有使用正确的正则表达式模式来匹配请求的uri。请尝试:

RewriteRule ^[^/]+/(.*?)/(.+\.[^/]+)$ /subdir/$1/$2 [L]