现在使用 nginx 的 PHP> = 8 的 Azure Web App 的 htaccess 文件的替代品是什么?

现在使用 nginx 的 PHP> = 8 的 Azure Web App 的 htaccess 文件的替代品是什么?

我们正在使用 Azure Web 应用程序来托管一些静态 HTML 页面,这些页面无法托管在 Azure 静态 Web 应用程序中,因为 Azure 静态 Web 应用程序不支持上传您自己的证书。

现在我们在 Azure Web 应用程序上有了 html 页面,我们需要创建重写规则,以便根据域或标题等,我们可以路由到正确的页面。

如果没有相当于 htaccess 的文件,该如何实现这一点?

我被告知唯一的解决方案是降级到使用 php 7 或更低版本的 Web 应用程序。这不是问题,因为我们的网站上没有 php,但这可能是一个问题,因为 MS 计划删除此托管。

如果没有办法执行任何类型的重写规则或使用 Azure Web 应用程序托管修改 Web 服务器配置,这似乎很奇怪。

答案1

.haccess是 Apache HTTPD 独有的功能,与 PHP 没有任何关联。有了 Apache 和任何版本的 PHP(或您拥有的任何版本),您都可以使用 .htaccess;如果没有 Apache,您将无法使用它。

Apache 的文档 从不推荐使用此功能,只留下一个有效用例 — 共享主机,租户无法更改httpd.conf文件。如果您有 VPS 或任何其他形式的个人服务器,您永远都不应该使用它.htaccess,即使使用 Apache HTTPD,也应该将所有内容放入其中httpd.conf(或放入从那里明确包含的文件中)。

.htaccess如果您有权访问 httpd 主服务器配置文件,则应完全避免使用文件。使用.htaccess文件会降低 Apache http 服务器的速度。任何可以包含在文件中的指令.htaccess最好都设置在Directory块中,因为它会具有相同的效果,且性能更好。

.htaccess很可能你早就应该改掉使用文件的这个坏习惯了。

Nginx 是另一个 HTTP 服务器,没有与之类似的功能.htaccess。您总是将所有内容配置到服务器配置文件中,nginx.conf并将其配置到明确包含的文件中。

可以将 Apache 的重写规则转换为 Nginx 的规则。我们可以帮您实现这一点,但您需要显示这些规则。

答案2

如果没有办法执行任何类型的重写规则或使用 Azure Web 应用程序托管修改 Web 服务器配置,这似乎很奇怪。

事实并非如此,尽管它的用户体验非常糟糕。但是,以下流程非常简单,比 Cloudflare 解决方案更受欢迎。

我将使用我刚刚为我的 PHP 8.2 项目实施的解决方案来为您提供答案。

  1. default.conf在我们的源代码管理的根目录中添加了一个文件。

    a. 这default.conf是使用default安装在应用服务上的 nginx 配置文件创建的。此默认配置文件位于/etc/nginx/sites-enabled/default

    b.我default.conf在源代码管理中编辑了文件以包含我的 nginx 重写规则。

  2. 部署将我们的源代码控制存储库复制到包含此文件的 Azure App Service 的 wwwroot 目录default.conf

  3. 在应用服务 > 配置 > 常规设置中,你需要添加这个小启动脚本,将文件复制default.conf到 nginx 使用的文件上

cp /home/site/wwwroot/default.conf /etc/nginx/sites-enabled/default; service nginx restart

我们的default.conf文件如下所示,供参考:

server {
    #proxy_cache cache;
    #proxy_cache_valid 200 1s;
    listen 8080;
    listen [::]:8080;
    root /home/site/wwwroot;
    index  index.php index.html index.htm;
    server_name  example.com www.example.com;
    port_in_redirect off;

    location / {
        index  index.php index.html index.htm hostingstart.html;
        try_files $uri $uri/ /index.php?$args; #### this specifically was the rewrite rule we needed for our project
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /html/;
    }

    # deny access to .env files
    location = /.env {
        deny all;
        return 404;
    }

    location = /.env.example {
        deny all;
        return 404;
    }

    # Disable .git directory
    location ~ /\.git {
        deny all;
        access_log off;
        log_not_found off;
    }

    # Add locations of phpmyadmin here.
    location ~* [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.[Pp][Hh][Pp])(|/.*)$;
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_param HTTP_PROXY "";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_intercept_errors on;
        fastcgi_connect_timeout         300;
        fastcgi_send_timeout           3600;
        fastcgi_read_timeout           3600;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }
}

答案3

好吧,我找到了一个解决方案,可以解决无法在 Azure Web 服务上添加重写规则的问题(无需破解启动脚本、破解文件,也无需破坏 Azure 控制面板功能,例如添加新域和证书)

该解决方案是将免费版 Cloudflare 放在 Azure Web 应用程序前面,并使用 Cloud Flare 重写规则(免费 10 条)。这解决了我们的问题,尽管我们更希望将 git 中的规则与我们的 Web 应用程序一起部署(可以使用 Azure 静态 Web 应用程序和 php < 8 的 Azure Web 应用程序来完成)。

相关内容