gpt4 book ai didi

.htaccess -::$ 1在htaccess中是什么意思?

转载 作者:行者123 更新时间:2023-12-04 09:51:03 25 4
gpt4 key购买 nike

我一直在浏览symfony2框架源代码。在他们的示例网站的htaccess文件中,我发现%{REQUEST_URI}::$1编写如下:

RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]

该规则上方的注释说明

The following rewrites all other queries to the front controller. The condition ensures that if you are using Apache aliases to do mass virtual hosting, the base path will be prepended to allow proper resolution of the app.php file; it will work in non-aliased environments as well, providing a safe, one-size fits all solution.



但是,这并不能解释 ::$1::\2

他们是反向引用吗?如果不是,那是什么?他们的目的是什么?

最佳答案

我在Zend项目中遇到了几乎相同的htaccess文件,这是我的想法,希望对您有所帮助。

htaccess文件(位于Zend项目目录,与index.php相同)表示

RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]

假设Zend安装在 http://mydomain.tld/zend上(稍后将其称为yourdomain)
我们正在请求 yourdomain/mycontroller/myaction
因此%{REQUEST_URI}将是/zend/mycontroller/myaction

请注意,htt上下文[1]中 $1指令中的模式 RewriteRule“将在删除导致服务器到达当前 RewriteRule的前缀(例如 app1/index.htmlindex.html取决于所在位置的前缀之后,首先与文件系统路径进行匹配)。指令已定义)”。

因此$1将是mycontroller/myaction
%{REQUEST_URI}::$1将是 /zend/mycontroller/myaction::mycontroller/myaction

上面的字符串将与 ^(/.+)(.+)::\2$匹配。请注意,对于用圆括号括起来的两个捕获组,即 (/.+)(.+)之前的 ::,许多组合都可以使之匹配。例如:

第1组: /z
第2组: end/mycontroller/myaction
或者

第1组: /zend/mycontroller/myactio
第2组: n
并且介于两者之间的任何内容都是有效的匹配。实际上,最有趣的是

第1组: /zend/
第2组: mycontroller/myaction
(这是唯一的情况)使向后引用 \2(在 ::之后)与第二组匹配。

在这种情况下, /zend/将存储在环境变量 BASE中,这是第一个 RewriteRule的作用。 %1引用 RewriteCond中的第一个匹配字符串,即 /zend/

查看第二个 RewriteRule,很清楚为什么需要这样做。由于 index.php只能在 /zend/index.php中找到,因此我们需要在 /zend/前面添加 index.php

在这里,我们假设使用URL路径作为第二个 RewriteRule指令的替代。请参阅[1],并在RewriteRule指令部分下搜索“到要提供资源的DocumentRoot相对路径”。

以上所有内容使查询字符串保持不变/不变。由 index.php决定如何解析查询字符串(以及URI)。

最后是在域根目录上安装Zend的情况。
  • %{REQUEST_URI}将是/mycontroller/myaction
  • $1将是mycontroller/myaction

  • 要由RewriteCond匹配的字符串将为 /mycontroller/myaction::mycontroller/myaction

    这次 (/.+)(.+)中的第二组将永远不会匹配 mycontroller/myaction,因为第一组的初始反斜杠后必须至少有一个字母,从而使第二组与 ycontroller/myaction接近,但与 mycontroller/myaction并不完全相同,因此无法匹配。

    结果,不使用第一个 RewriteRuleBASE环境变量将不会被设置,并且当第二个RewriteRule使用它时,它只会是空的。

    引用

    [1] http://httpd.apache.org/docs/current/mod/mod_rewrite.html

    关于.htaccess -::$ 1在htaccess中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16762119/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com