regex - 在 NGINX 中,从 URI 中删除 .html 扩展名而不进行重定向
问题描述
我正在尝试修改我的 NGINX 配置以从 URI 中去除 .html 扩展名,然后再将它们传递给基于 PHP 的 CMS。
换句话说,当访客进入时:
http://www.example.com/foo.html
我希望将 URI 更改为 /;
无需进行实际的浏览器重定向。这在 Apache 中很容易完成,但我似乎无法在 NGINX 中解决问题。这是我的配置文件中似乎不起作用的内容。
location ~ \.html {
rewrite ^(/.*)\.html(\?.*)?$ $1$2 last;
}
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
使用此代码,PHP 获取的 REQUEST_URI 仍然是 /foo.html。
解决方案
我自己的问题的可能答案,或者至少是一种解决方法。
所以显然 $request_uri 总是会包含原始 URI,而不是重写 - 包含在 $uri 中。因此,为了解决这个问题,我使用一个变量来存储修改后的 URI 并将其传递给 PHP。不过,我对这个解决方案并不感到兴奋。
location ~ \.html {
rewrite ^(/.*)\.html(\?.*)?$ $1$2 last;
}
location / {
set $new_uri $uri
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param REQUEST_URI $new_uri;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
推荐阅读
- c# - Filter string array with substring
- excel - Excel VBA - 在组合框中组合值的范围
- python - python字符串包含并且字符串等于
- python - Django 多文件上传
- c# - 从 Xamarin.Forms 中的数据模板访问图像
- arrays - 从外部 JSON 文件构建数组时 V-for 不工作
- python - 进一步加快并行化进程
- python - 如何让 Tensorflow 嵌入投影仪处理图像
- python - 如何从两个顺序网络创建自动编码器?
- swift - 是否可以用 AnyPublisher 包装 AVPlayer 播放和暂停