在nginx上重写html之前的php扩展

在nginx上重写html之前的php扩展,php,nginx,server,Php,Nginx,Server,我试图将一个无扩展服务器请求重写为相应的php文件。到目前为止,我成功地做到了这一点,但我想在html之前重写php,所以当我必须使用相同文件名的文件时,它首先尝试查找文件的php版本,只有当它不作为php存在时,才尝试将其作为html查找。我不知道这是否有意义,我只是想知道是否有可能在html版本之前获得文件的php版本。我的代码看起来是这样的,但是如果我在try\u files行中更改@extensionless php的位置,则会导致404或500错误。我的代码如下所示: root pat

我试图将一个无扩展服务器请求重写为相应的php文件。到目前为止,我成功地做到了这一点,但我想在html之前重写php,所以当我必须使用相同文件名的文件时,它首先尝试查找文件的php版本,只有当它不作为php存在时,才尝试将其作为html查找。我不知道这是否有意义,我只是想知道是否有可能在html版本之前获得文件的php版本。我的代码看起来是这样的,但是如果我在
try\u files
行中更改
@extensionless php
的位置,则会导致
404
500
错误。我的代码如下所示:

root path/to/root;
index index.php index.html;

try_files $uri $uri.html $uri/ @extensionless-php;

location ~ \.php$ {
        try_files $uri =404;

        # cgi-params
    }

location @extensionless-php {
        rewrite ^(.*)$ $1.php last;
    }

如果有人知道实现这一点的方法或对此有进一步的建议,请告诉我。

一种可能的方法是从
try\u files
语句中删除
$uri.html
子句,然后在指定的位置块中尝试这两个扩展名。例如:

root path/to/root;
index index.php index.html;

location / {
    try_files $uri $uri/ @rewrite;
}
location ~ \.php$ { ... }

location @rewrite {
    if (-e $request_filename.php) {
        rewrite ^ $uri.php last;
    }
    if (-e $request_filename.html) {
        rewrite ^ $uri.html last;
    }
}

请注意,
if
指令附带以下内容。

一种可能的方法是从
try\u files
语句中删除
$uri.html
子句,并在命名的位置块中尝试这两个扩展名。例如:

root path/to/root;
index index.php index.html;

location / {
    try_files $uri $uri/ @rewrite;
}
location ~ \.php$ { ... }

location @rewrite {
    if (-e $request_filename.php) {
        rewrite ^ $uri.php last;
    }
    if (-e $request_filename.html) {
        rewrite ^ $uri.html last;
    }
}

请注意,
if
指令附带以下内容。

不确定该问题是否有意义。您谈论的是无扩展请求和重写到PHP。当有两个同名文件,一个以.HTML结尾,另一个以.php结尾时,我看不出HTML在哪里。我想让它先重写php,如果这不起作用(即该文件不存在于“php版本”),请回过头来重写为html。我建议你更新你的问题,因为它确实澄清了很多问题。不确定这个问题是否有意义。您谈论的是无扩展请求和重写到PHP。当有两个同名文件,一个以.HTML结尾,另一个以.php结尾时,我看不出HTML在哪里。我想让它先重写php,如果这不起作用(即,该文件不存在于“php版本”),请退回到将其重写为html。我建议您更新您的问题,因为它确实澄清了很多问题。这或多或少是我在寻找的。谢谢。这差不多就是我要找的。非常感谢。