顾名思义.htaccess
,它可以控制对目录的访问。.htaccess
每次请求都会读取文件。我猜这意味着对域名的每个 HTTP 请求都必须通过该.htaccess
文件。所以看起来.htaccess
文件就像一个gatekeeper
. 从 Wikipedia 看来,该.htaccess
文件可用于阻止某些 IP 地址加载网页。
文件的第一行.htaccess
是: RewriteEngine On
那行代码:是打开或关闭RewriteEngine
Apache 的 Apache 指令。Rewriting Engine
所以该.htaccess
文件正在查看每个请求,接受请求,然后推出不同的请求。
似乎该app.yaml
文件不能直接接受一个 URL 请求,并推出一个不同的请求,但该app.yaml
文件可以接受一个 URL 请求,然后运行一个 PHP 脚本,这将改变请求。
因此,在app.yaml
文件中,获取 URL 然后重定向到脚本的部分将如下所示:
捕获传入的 URL 请求并导致mod_rewrite.php
文件运行。
- url: /Put the incoming URL you want to monitor, catch and redirect here
script: mod_rewrite.php
使用 app.yaml 重定向 URL 请求
文件的第二行.htaccess
是:
RewriteCond %{REQUEST_FILENAME} !-f
这是一个测试,在传入的 URL 请求中寻找匹配项。最后-f
是:
-f (是常规文件) 将TestString 视为路径名并测试它是否存在,并且是常规文件。
等一下!前面有一个感叹号。这可能是对逻辑非的测试。那么,如果它不是常规文件呢?
不管什么意思。普通文件和其他所有文件有什么区别?什么是不规则文件?大声笑 idk。无论如何,我猜它正在寻找一个文件。
来自 Apache 文档,这里有一个引用:
服务器变量:这些是 %{ NAME_OF_VARIABLE } 形式的变量,其中 NAME_OF_VARIABLE 可以是从以下列表中获取的字符串:
所以%{REQUEST_FILENAME}
第二行的那部分就是 Apache 所说的 a Server-Variable
,具体Server-Variable
是REQUEST_FILENAME
.
这是来自 Apache 文档的引用:
REQUEST_FILENAME 与请求匹配的文件或脚本的完整本地文件系统路径,如果在引用 REQUEST_FILENAME 时服务器已经确定了这一点。否则,例如在虚拟主机上下文中使用时,与 REQUEST_URI 的值相同。根据 AcceptPathInfo 的值,服务器可能只使用了 REQUEST_URI 的一些前导组件来将请求映射到文件。
所以我猜该.htaccess
文件正在寻找看起来像本地计算机上文件路径的东西?
最后是Rewrite Rule
Apache RewriteRule
到底是QSA
为了什么?我想它被称为旗帜,并且:
使用 [QSA] 标志会合并查询字符串
QSA 似乎代表Query String Append
. 如果传入的 URL 在其末尾有一个查询字符串,您希望如何处理它?
[L] 防止附加任何进一步的重写规则
Appache L 重写标志
Appache 文档 QSA
字符 (^) 称为插入符号。我不知道为什么一开始就使用它。Appache 重写指令的语法是:
RewriteRule pattern target [Flag1,Flag2,Flag3]
所以插入符号是被检测模式的一部分。那个目标简直了index.php
。所以看起来如果许多不同的可能请求只是简单地路由回index.php
文件,这是应用程序运行的第一件事。
最后的星号可能是任何扩展的通配符。