可以通过以下配置实现此功能:
复制server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ @index;
}
location @index {
if (-f $document_root/index.html) {
return 200;
}
rewrite ^ /index.html last;
}
}
上面的配置中,try_files
指令会先尝试访问与请求路径相同的文件,如果文件不存在则尝试访问对应的目录下的index.html
文件。
如果try_files
无法找到对应的文件,则会执行重写规则,将请求路径重写为index.html
,然后返回200状态码。
注意,使用if指令会影响性能,因此应该尽量避免使用。在上面的配置中,我们使用if指令来判断index.html
文件是否存在。如果存在,则直接返回200状态码,否则才执行重写规则。
-
在nginx中,可以使用
try_files
指令来实现伪静态判断html是否存在,如果不存在则访问php。具体配置如下:
复制
location / { try_files $uri.html $uri $uri/ @php; } location @php { # 将请求转发给php-fpm处理 fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
解释一下上面的配置:
try_files $uri.html $uri $uri/ @php;
:先尝试访问与请求路径同名的html文件,若存在则直接返回;如果不存在,则尝试访问请求路径(即不带后缀的原始路径),若存在则直接返回;如果还是不存在,则尝试访问以请求路径为目录的index文件(如/test/
会尝试访问/test/index.html
或/test/index.php
),若存在则直接返回;最后,如果还是未找到对应文件,则将请求转发给@php对应的location处理。location @php { ... }
:当上面的try_files未找到对应文件时,请求会被转发到这个location处理,并将请求转发给php-fpm处理。
通过上述配置,可以实现nginx伪静态判断html是否存在,如果不存在则访问php。
点击复制后,将打开C知道体验页
|
-
wordpress,伪静态先使用try_files 判断html是否存在,如果不存在则访问index.php
点击复制后,将打开C知道体验页
-
是的,这是一种常见的实现方式。在 Nginx 的配置中,可以使用 try_files 指令来判断请求的文件是否存在,如果不存在则将请求交给 index.php 处理。具体的配置如下:
复制
location / { try_files $uri $uri/ /index.php?$args; }
其中,$uri 表示当前请求的 URI,$uri/ 表示当前请求的 URI 加上一个斜杠,/index.php?$args 表示将请求交给 index.php 处理,并将原始的查询参数传递给 index.php。
这样的配置可以实现 WordPress 的伪静态功能,即将请求转换为类似于 /post/123 的 URL 形式,并通过 index.php 处理这些请求。