假设我有一个名为careers.php
的文件,当他们单击一个指向http://example.com/careers
的链接时,如果.html
和.php
文件的扩展名都不带nginx,我该如何提供该文件?
1.请注意,解决方案必须考虑查询字符串,例如,URL可能是http://example.com/careers?lang=fr
。
1.此外,我希望解决方案也尝试子目录以及。如果我在服务器上的文件夹结构是/views/careers.php
,我希望http://example.com/careers
仍然为/views/careers.php
服务。
我的当前配置如下所示:
server {
listen 80 default_server;
root /usr/share/nginx/landing-page;
index index.php index.html;
server_name example.com;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
3条答案
按热度按时间ar7v8xwq1#
一个常见的解决方案是使用带有命名位置的
try_files
。现有的location ~ \.php$
块用于处理.php
文件。还要避免使用任何if
语句。vm0i2vca2#
您可以使用
try_files
:deikduxw3#
我知道这是一个老职位,但我觉得这是从来没有完美的解释或解释使用最简单的解决方案。
下面是一个示例,说明我是如何为托管在Digital Ocean上的Portfolio网站使用nginx提供服务的React应用程序实现这一点的。
当简化后,它是超级容易完成的。位置块应该看起来像这样。