在nginx上重写html之前的php扩展
我试图将一个无扩展服务器请求重写为相应的php文件。到目前为止,我成功地做到了这一点,但我想在html之前重写php,所以当我必须使用相同文件名的文件时,它首先尝试查找文件的php版本,只有当它不作为php存在时,才尝试将其作为html查找。我不知道这是否有意义,我只是想知道是否有可能在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
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。我建议您更新您的问题,因为它确实澄清了很多问题。这或多或少是我在寻找的。谢谢。这差不多就是我要找的。非常感谢。