我们正在使用 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 项目实施的解决方案来为您提供答案。
我
default.conf
在我们的源代码管理的根目录中添加了一个文件。a. 这
default.conf
是使用default
安装在应用服务上的 nginx 配置文件创建的。此默认配置文件位于/etc/nginx/sites-enabled/default
。b.我
default.conf
在源代码管理中编辑了文件以包含我的 nginx 重写规则。部署将我们的源代码控制存储库复制到包含此文件的 Azure App Service 的 wwwroot 目录
default.conf
。在应用服务 > 配置 > 常规设置中,你需要添加这个小启动脚本,将文件复制
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 应用程序来完成)。