尝试理解这组 Apache2 重写规则

尝试理解这组 Apache2 重写规则

我有以下 Apache2 Rewrite 规则,并且正在尝试破译它们背后的含义:

1. RewriteEngine on
2. RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4
3. RewriteCond %{REQUEST_URI} !\.(css|gif|jpg|png)$
4. RewriteCond %{DOCUMENT_ROOT}/../tmp/stop.txt -f
5. RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
6. RewriteRule ^(.*)$ /$1 [R=503,L]
  1. 打开RewriteEngine
  2. 如果请求的地址不是来自 IP 1.2.3.4
  3. 如果请求的 URI 不包含以 .css 或 .gif 或 .jpg 或 .png 结尾的资源
  4. 如果 URI 请求 ../tmp/stop.txt(并且它是一个文件)
  5. 如果请求的路径不是常规文件
  6. 如果规则 2、3、4、5 中的任何一条为真,则显示 503 状态页面?

我接近了吗?

谢谢

答案1

您已经非常接近了:

  • 步骤 2 :它不是请求的地址,而是客户端地址(发出请求的主机的 IP 地址):如果客户端地址不是 1.2.3.4

  • 步骤 4:正如@Florin Asavoaie 所述:这只是检查文件是否 ../tmp/stop.txt存在,无论是否请求。

  • 步骤 5:如果请求的文件不存在

  • 步骤 6:是AND且不是OR(所有规则必须匹配)。所以:

    if (rule 2 is true) AND (rule 3 is true) AND (rule 4 is true) AND (rule 5 is true)
    {  
       Then return 503 - Service Temporarily Unavailable (which works)
    }
    

答案2

在步骤 4 中,它只需验证该文件是否存在,无论是否请求该文件。

您真的测试过这些吗?我不确定您是否可以使用 3XX 以外的代码进行“重定向”。

相关内容