将文件夹重写到该文件夹​​中的另一个子文件夹

时间:2014-04-24 21:13:14

标签: regex apache .htaccess mod-rewrite

我正在尝试将请求从文件夹转换为该文件夹中的另一个子文件夹。让我解释一下:

转换: localhost / myproject / build / css / style.css

收件人: localhost / myproject / build / dev / css / style.css

因此,我需要在'build /'文件夹之后为请求添加'/ dev'。我有什么?:

RewriteCond %{HTTP_HOST} ^localhost$ [NC]
RewriteRule ^build/(.*) build/dev/$1

我从Apache获得了一个无限循环:

  

[Thu Apr 24 17:56:39.721756 2014] [核心:错误] [pid 6980:tid 1660]   [client :: 1:55569] AH00124:请求超出10内部限制   由于可能的配置错误而重定向。使用   'LimitInternalRecursion'可在必要时增加限制。使用   “LogLevel debug”以获得回溯。

我知道发生了什么,Apache正在这样做:

build/css/style.css (original request)
build/dev/css/style.css 
build/dev/dev/style.css
build/dev/dev/dev/style.css
.... to the infinite

所以我只需要抓住一次重写请求。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这应该有效:

RewriteCond %{HTTP_HOST} ^localhost$ [NC]
RewriteCond %{REQUEST_URI} !^/build/dev/(.*)
RewriteRule ^build/(.*) /build/dev/$1 [R=301]

以上内容将检查并查看网址中是否有build/dev/,它是否会重定向。如果dev/位于网址中,则表示您要添加build/,这会导致重定向循环。

答案 1 :(得分:0)

添加/dev后,您需要使用条件跳过添加:

RewriteCond %{HTTP_HOST} ^localhost$ [NC]
RewriteRule ^build/((?!dev/).*)$ build/dev/$1 [L,NC]