我搜索过这个问题是否之前已被回答过,但没有结果。
我想使用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
。
别在意那些定义在区块中,它们不执行任何操作,也没有任何效果。
谢谢