Apache:使用 RewriteRule 进行模式匹配和分组会导致获取本地路径,而不是获取 URL 组件

Apache:使用 RewriteRule 进行模式匹配和分组会导致获取本地路径,而不是获取 URL 组件

我搜索过这个问题是否之前已被回答过,但没有结果。

我想使用RewriteRule模式匹配来获取请求的路径并将客户端重定向到其他地方,并在结果重定向中保留该路径。

我认为这样的事情会起作用:

RewriteRule.  ^(.*)$ http://testserver/test/$1

如果用户请求foo,则将他发送到test/foo(不要担心循环,我设置了一些RewriteCond逻辑来防止这种情况发生)。

令我惊讶的是,Apache 最终得到了类似这样的结果 http://testserver/foo/var/www/html。它做了以下事情:

/bar   /var/www/html/bar

我提高了 mod_rewrite 的日志级别,发现它确实匹配,但是 Apache 正在扩展匹配的本地路径/,即/var/www/html并使用它来重定向浏览器,这是行不通的。

我尝试使用[PT]我认为可以阻止扩展的方法,但是却没有。

有什么办法可以防止这种情况发生吗?任何帮助都将不胜感激。

答案1

回答@MrWhite,我附上了相关的<if>内容:

<如果“env('var1')=='1'&& env('var2')=='0'&& env('var3')=='1'”>
           定义 requestUri $1
           定义后端 $customDomain
           RewriteEngine 开启
           重写条件 %{REQUEST_URI} !^/redir/.*$
           重写规则 ^(.*)$ /redir/%{REQUEST_URI}
</如果>           

这个块位于<Location>块之下,而块又位于主<VirtualHost>块之下。

如果我将其移出块<If>,该模式将返回^(.*)$相同的%{REQUEST_URI}结果。在<If>块内,它将扩展到本地文件系统 + 所请求的资源(如果我请求,/index.html它将扩展到/var/www/html/index.html

别在意那些定义在区块中,它们不执行任何操作,也没有任何效果。

谢谢

相关内容