由于遗留原因,我需要在 nginx 上实现以下场景,但我似乎遇到了麻烦。假设我在文档根目录中有一个名为“info”的文件,没有任何文件扩展名。现在这是一个 PHP 文件,但它没有扩展名,并且无法重命名,原因我不会在这里解释。我该如何编写 nginx 配置以使此文件被 PHP 解析。
我实际上已尝试将此文件重命名为 info.php,然后将以下内容添加到我的 nginx 配置中,然后我尝试点击以http://{siteurl}/info
期望它在内部重写为info.php
,但它所做的只是失败了index.html
。
location / {
try_files @extensionless-php $uri $uri/ /index.html;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
现在我对 nginx 还很陌生,所以我认为我只是缺少一些非常基本的东西。以前在 apache 中,配置是这样的,以使这种情况正常工作...
<LocationMatch "^/(info|...a few other files...)/?.*$">
ForceType application/x-httpd-php
</LocationMatch>
任何帮助深表感谢。
答案1
试试这个。请注意,我try_files
对您的示例进行了轻微的调整。我还添加了root
应该与您的 Web 根路径相匹配的内容。
location / {
root /your/web/root/path
try_files $uri $uri/ @extensionless-php;
index index.php index.html;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
答案2
终于明白了:
location /info {
root /usr/share/nginx/www;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/www/info.php;
}
事实上现在这是有道理的,因为我费心去阅读文档......
答案3
这对我有用:
## Your root already needs to be defined
# root /your/web/root/path
location / {
try_files $uri $uri/ $uri.php =404;
index index.php index.html;
}
当点击一个 url ( http://somedomain.com/some/path/action
) 时,它将首先尝试some/path/action
,然后some/path/action/[index.php]
,然后some/path/action.php
,如果找不到文件,则会失败并出现 404 错误。